ChromeHSTS異常導致無法訪問HTTPS網頁

技術小胖子發表於2017-11-07

今天小夥伴突然告訴我,他的電腦上打不開網頁了,然後把以下截圖給我發了過來:
Chrome HSTS異常導致無法訪問HTTPS網頁 

瞭解到他是用shadowsocks訪問谷歌的時候網頁打不開,之前是都是OK的。簡單讓他做了下網路連通性測試:ping域名,telnet網站的80和443埠,發現網路是OK的。然後仔細看了下他的報錯資訊:
NET::ERR_CERT_COMMON_NAME_INVALID,詳情頁裡可以看到是“因為此網站使用了HSTS”,於是讓他嘗試清理下Chrome上HSTS安全設定策略,清理後恢復正常,具體操作如下: 

在Chrome瀏覽器中輸入:chrome://net-internals/#hsts:
Chrome HSTS異常導致無法訪問HTTPS網頁

找到相應的“delete domain security policies”,輸入訪問有問題的網站域名,然後點選刪除(delete):
Chrome HSTS異常導致無法訪問HTTPS網頁

找到“Query HSTS/PKP domain”,輸入剛才刪除的域名,查詢結果返回“Not Found”,代表已經刪除成功:
Chrome HSTS異常導致無法訪問HTTPS網頁

之後再重新訪問之前的頁面,此時網頁能夠正常開啟。

問題雖然已經解決,那麼我們本著知其然,且知其所以然的原則,我們總結一下: 

報錯是HSTS的問題,那麼我們嘗試清理HSTS的設定,重新獲取一下即可。那麼什麼是HSTS呢:
HSTS is HTTP Strict Transport Security: a way for sites to elect to always use HTTPS. See https://www.chromium.org/hsts, 是國際網際網路工程組織IETF正在推行一種新的Web安全協議,HSTS的作用是強制客戶端(如瀏覽器)使用HTTPS與伺服器建立連線。

採用HSTS協議的網站將保證瀏覽器始終連線到該網站的HTTPS加密版本,不需要使用者手動在URL位址列中輸入加密地址。

該協議將幫助網站採用全域性加密,使用者看到的就是該網站的安全版本。

HSTS的作用是強制客戶端(如瀏覽器)使用HTTPS與伺服器建立連線。伺服器開啟HSTS的方法是,當客戶端通過HTTPS發出請求時,在伺服器返回的超文字傳輸協議響應頭中包含Strict-Transport-Security欄位。非加密傳輸時設定的HSTS欄位無效。

比如,https://xxx 的響應頭含有Strict-Transport-Security: max-age=31536000; includeSubDomains。這意味著兩點:

在接下來的一年(即31536000秒)中,瀏覽器只要向xxx或其子域名傳送HTTP請求時,必須採用HTTPS來發起連線。比如,使用者點選超連結或在位址列輸入 http://xxx/ ,瀏覽器應當自動將 http 轉寫成 https,然後直接向 https://xxx/ 傳送請求。

在接下來的一年中,如果 xxx 伺服器傳送的TLS證書無效,使用者不能忽略瀏覽器警告繼續訪問網站。

進入瀏覽器的inspeck模式,我們可以看到Response Headers如下:
Chrome HSTS異常導致無法訪問HTTPS網頁

小夥伴的電腦很可能是因某些原因導致待訪問網站的HSTS失效了,所以清理之後,重新認證一下即恢復正常。

      本文轉自Jx戰壕  51CTO部落格,原文連結:http://blog.51cto.com/xujpxm/2085695,如需轉載請自行聯絡原作者


相關文章