1. 程式人生 > >chrome NET::ERR_CERT_AUTHORITY_INVALID提示網址不安全無法訪問

chrome NET::ERR_CERT_AUTHORITY_INVALID提示網址不安全無法訪問

無 用chrome測試


1. 問題描述


今天用Apache搭建好PC端服務器後,用Chrome測試,打開http://www.baidu.com/時出現了如下的錯誤:



技術分享圖片2. 錯誤原因

經試驗發現,對於firefox和IE不會出現上述問題。或者會出現安全警告,但是可以選擇信任而繼續訪問頁面。但是對於chrome瀏覽器則不可以。

原因在於,chrome瀏覽器新加入了HSTS策略(見上圖紅色圈)。使用HSTS策略是chrome加入的新特性,使用該策略的網站,會強制瀏覽器使用HTTPS協議與該網站通信。

HTTPS和HTTP的區別在於,用HTTPS協議時傳輸的數據是加密的(TSL和SSL),而用HTTP傳輸時是明文傳輸。

具體來說,HTTPS協議對傳輸內容使用的是對稱加密算法,也即通信雙方使用相同的密鑰。但是對於密鑰分發過程則使用的是公鑰加密。但是我如何確認服務器不是別人偽造的呢?——我需要驗證他的身份,即驗證他的公鑰。在服務器給我提供的證書中,有他聲明的公鑰Kp1,也有第三方用第三方自己的私鑰(Ks0)加密服務器公鑰(Kp1)後的密文(Ck1)。假如我相信第三方的身份是真實可信的,那麽我用第三方的公鑰(Kp0),解密服務器的被第三方加密的公鑰,和服務器直接發給我的公鑰比較。如果相同,則驗證成功;不同則驗證失敗。

數學公式:證書構成(Kp1, Ck1, Kp0) ,其中Ck1==Eks0(Kp1),若Kp1 == Dkp0(Ck1)則驗證成功。

這裏一個重要的假設是我相信第三方,也即我相信證書是有效的(證書還包含其它信息來供大家確定是否有效,上段描述只是簡化)。然而這裏我自己搭建的服務器所提供的證書並不被chrome所信任,所以驗證失敗。

造成證書不受信的可能的情況有:
1. 第三方證書沒有及時更新
2. 第三方服務器不安全
3. 證書不是由可信第三方頒布

技術分享圖片3. 解決方法

在chrome的地址欄裏輸入 chrome://net-internals/#hsts,把localhost從HSTS中刪除,如下圖:

Delete domain

Input a domain name to delete it from the HSTS set (you cannot delete preloaded entries):

Domain:

Query domain

Input a domain name to query the current HSTS set:

Domain:

Not found


chrome NET::ERR_CERT_AUTHORITY_INVALID提示網址不安全無法訪問