早些年谷歌工程師為了提高互聯網整體的安全性避免因證書頒發機構違規操作而設計了 HPKP 公鑰固定標準。公鑰固定允許網站在服務器部署證書頒發機構的哈希值, 若網站使用的證書與固定的哈希不對應則拒絕連接。公鑰固定的現實意義在于如果有CA證書頒發機構違規向某個域名私自簽發證書那么也無法實現對網站的劫持。
但是現在谷歌瀏覽器已經決定棄用 HPKP 公鑰固定標準,預計將會在2018 年5月份到來的正式版里正式棄用。
那么問題到底發生在哪里?
HPKP公鑰固定所攜帶的是中級證書或者根證書的哈希值,并與終端瀏覽器約定此哈希通常會在1年左右失效。例如藍點網目前使用的是TrustAsia(中級CA)提供的證書,我們已經將TrustAsia的中級證書哈希進行固定。
如果1年后藍點網不再使用TrustAsia 簽發的證書而換成其他,這會造成實際使用證書與固定的證書哈希不同。那么瀏覽器就會直接攔截用戶與藍點網服務器之間的連接,瀏覽器會認為新更換的CA可能是想進行惡意劫持。
由此可引發非安全方面的拒絕訪問攻擊:
安全研究員斯科特稱攻擊者可劫持用戶訪問并返回惡意 HPKP 頭,這種操作并不會造成用戶的數據發生泄露。但惡意HPKP頭在被瀏覽器接收后會阻止用戶正常訪問網站,因為瀏覽器校驗到的HPKP頭與真實服務器不同。
因此惡意攻擊者可以利用 HPKP 公鑰固定策略無差別的對所有HTTPS網站發起這種有點另類的拒絕訪問攻擊。雖然網站所有者始終沒有丟失對網站和服務器的控制權,但由于固定哈希已經被接收因此沒有辦法清除緩存。
撰寫該標準的谷歌工程師稱HPKP很可怕:
參與撰寫和制定該標準(RFC 7469)的谷歌工程師稱公鑰固定變得非常可怕,該標準會對生態造成嚴重危害。除了惡意攻擊者可以偽造 HPKP 頭進行拒絕訪問攻擊外,如果證書發生泄露需要進行吊銷也會引發較大問題。因為吊銷舊證書后再請求簽發新證書只能選擇此前固定的CA 機構,你不能再選擇新的CA 機構為你簽發證書。
基于此方面考慮HPKP標準在制定時已要求網站至少固定兩份哈希,如藍點網固定的是TrustAsia和Comodo。因此最終更換證書時我只能繼續選擇由TrustAsia或Comodo簽發的證書, 其他的證書瀏覽器則會拒絕接受。
Google Chrome v67版開始棄用HPKP:
目前已經支持HPKP公鑰固定的瀏覽器有Google Chrome瀏覽器、Mozilla Firefox瀏覽器以及Opera瀏覽器。既然作為標準參與制定的谷歌都決定放棄支持,Mozilla Firefox和Opera 勢必也會在后續停止支持公鑰固定。
谷歌去年8月的數據顯示全球啟用HPKP的站點僅只有375個,這個數字對于整個互聯網來說真的是微不足道。同時由于很多網站使用CDN或者如CloudFlare類的DDoS防護,此類服務本身就沒準備支持HPKP公鑰固定。最終谷歌會在2018年5月份發布的Chrome v67版中正式棄用HPKP,使用該標準的網站可以提前撤銷固定了。