HPKP 公钥固定所携带的是中级证书或者根证书的哈希值,并与终端浏览器约定此哈希通常会在 1 年左右失效。如果 1 年后网站不再使用 TrustAsia 签发的证书而换成其他,这会造成实际使用证书与固定的证书哈希不同。那么浏览器就会直接拦截用户与服务器之间的连接,浏览器会认为新更换的 CA 可能是想进行恶意劫持。
安全研究员斯科特称攻击者可劫持用户访问并返回恶意 HPKP 头,这种操作并不会造成用户的数据发生泄露。但恶意 HPKP 头在被浏览器接收后会阻止用户正常访问网站,因为浏览器校验到的 HPKP 头与真实服务器不同。因此恶意攻击者可以利用 HPKP 公钥固定策略无差别的对所有 HTTPS 网站发起这种有点另类的拒绝访问攻击。虽然网站所有者始终没有丢失对网站和服务器的控制权,但由于固定哈希已经被接收因此没有办法清除缓存。
参与撰写和制定该标准(RFC 7469)的谷歌工程师称公钥固定变得非常可怕,该标准会对生态造成严重危害。除了恶意攻击者可以伪造 HPKP 头进行拒绝访问攻击外,如果证书发生泄露需要进行吊销也会引发较大问题。因为吊销旧证书后再请求签发新证书只能选择此前固定的 CA 机构,你不能再选择新的 CA 机构为你签发证书。
基于此方面考虑 HPKP 标准在制定时已要求网站至少固定两份哈希,因此最终更换证书时只能继续选择由 TrustAsia 或 Comodo 签发的证书, 其他的证书浏览器则会拒绝接受。目前,已经支持 HPKP 公钥固定的浏览器有 Google Chrome 浏览器、Mozilla Firefox 浏览器以及 Opera 浏览器。既然作为标准参与制定的谷歌都决定放弃支持,Mozilla Firefox 和 Opera 势必也会在后续停止支持公钥固定。
谷歌去年 8 月的数据显示全球启用 HPKP 的站点仅只有 375 个,这个数字对于整个互联网来说真的是微不足道。同时由于很多网站使用 CDN 或者如 CloudFlare 类的 DDoS 防护,此类服务本身就没准备支持 HPKP 公钥固定。最终谷歌会在 2018 年 5 月份发布的 Chrome v67 版中正式弃用 HPKP,使用该标准的网站可以提前撤销固定了。