HPKP 公鑰固定所攜帶的是中級(jí)證書(shū)或者根證書(shū)的哈希值,并與終端瀏覽器約定此哈希通常會(huì)在 1 年左右失效。如果 1 年后網(wǎng)站不再使用 TrustAsia 簽發(fā)的證書(shū)而換成其他,這會(huì)造成實(shí)際使用證書(shū)與固定的證書(shū)哈希不同。那么瀏覽器就會(huì)直接攔截用戶與服務(wù)器之間的連接,瀏覽器會(huì)認(rèn)為新更換的 CA 可能是想進(jìn)行惡意劫持。
安全研究員斯科特稱攻擊者可劫持用戶訪問(wèn)并返回惡意 HPKP 頭,這種操作并不會(huì)造成用戶的數(shù)據(jù)發(fā)生泄露。但惡意 HPKP 頭在被瀏覽器接收后會(huì)阻止用戶正常訪問(wèn)網(wǎng)站,因?yàn)闉g覽器校驗(yàn)到的 HPKP 頭與真實(shí)服務(wù)器不同。因此惡意攻擊者可以利用 HPKP 公鑰固定策略無(wú)差別的對(duì)所有 HTTPS 網(wǎng)站發(fā)起這種有點(diǎn)另類的拒絕訪問(wèn)攻擊。雖然網(wǎng)站所有者始終沒(méi)有丟失對(duì)網(wǎng)站和服務(wù)器的控制權(quán),但由于固定哈希已經(jīng)被接收因此沒(méi)有辦法清除緩存。
參與撰寫(xiě)和制定該標(biāo)準(zhǔn)(RFC 7469)的谷歌工程師稱公鑰固定變得非??膳?,該標(biāo)準(zhǔn)會(huì)對(duì)生態(tài)造成嚴(yán)重危害。除了惡意攻擊者可以偽造 HPKP 頭進(jìn)行拒絕訪問(wèn)攻擊外,如果證書(shū)發(fā)生泄露需要進(jìn)行吊銷(xiāo)也會(huì)引發(fā)較大問(wèn)題。因?yàn)榈蹁N(xiāo)舊證書(shū)后再請(qǐng)求簽發(fā)新證書(shū)只能選擇此前固定的 CA 機(jī)構(gòu),你不能再選擇新的 CA 機(jī)構(gòu)為你簽發(fā)證書(shū)。
基于此方面考慮 HPKP 標(biāo)準(zhǔn)在制定時(shí)已要求網(wǎng)站至少固定兩份哈希,因此最終更換證書(shū)時(shí)只能繼續(xù)選擇由 TrustAsia 或 Comodo 簽發(fā)的證書(shū), 其他的證書(shū)瀏覽器則會(huì)拒絕接受。目前,已經(jīng)支持 HPKP 公鑰固定的瀏覽器有 Google Chrome 瀏覽器、Mozilla Firefox 瀏覽器以及 Opera 瀏覽器。既然作為標(biāo)準(zhǔn)參與制定的谷歌都決定放棄支持,Mozilla Firefox 和 Opera 勢(shì)必也會(huì)在后續(xù)停止支持公鑰固定。
谷歌去年 8 月的數(shù)據(jù)顯示全球啟用 HPKP 的站點(diǎn)僅只有 375 個(gè),這個(gè)數(shù)字對(duì)于整個(gè)互聯(lián)網(wǎng)來(lái)說(shuō)真的是微不足道。同時(shí)由于很多網(wǎng)站使用 CDN 或者如 CloudFlare 類的 DDoS 防護(hù),此類服務(wù)本身就沒(méi)準(zhǔn)備支持 HPKP 公鑰固定。最終谷歌會(huì)在 2018 年 5 月份發(fā)布的 Chrome v67 版中正式棄用 HPKP,使用該標(biāo)準(zhǔn)的網(wǎng)站可以提前撤銷(xiāo)固定了。