早些年谷歌工程师为了提高互联网整体的安全性避免因证书颁发机构违规操作而设计了 HPKP 公钥固定标准。公钥固定允许网站在服务器部署证书颁发机构的哈希值, 若网站使用的证书与固定的哈希不对应则拒绝连接。公钥固定的现实意义在于如果有 CA 证书颁发机构违规向某个域名私自签发证书那么也无法实现对网站的劫持。
但是现在谷歌浏览器已经决定弃用 HPKP 公钥固定标准,预计将会在 2018 年 5 月份到来的正式版里正式弃用。
那么问题到底发生在哪里?
HPKP 公钥固定所携带的是中级证书或者根证书的哈希值,并与终端浏览器约定此哈希通常会在 1 年左右失效。
例如蓝点网目前使用的是 TrustAsia(中级 CA)提供的证书,我们已经将 TrustAsia 的中级证书哈希进行固定。
server { listen 443 ssl http2; ssl on; ssl_certificate /usr/local/nginx/conf/vhost/crt/www.landiannews.com.crt; ssl_certificate_key /usr/local/nginx/conf/vhost/crt/www.landiannews.com.key; # 启用严格安全传输HSTS add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; # 启用 HPKP 公钥固定 add_header Public-Key-Pins 'pin-sha256="IiSbZ4pMDEyXvtl7Lg8K3FNmJcTAhKUTrB2FQOaAO/s="; pin-sha256="klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY="; max-age=2592000; includeSubDomains'; ssl_session_timeout 5m; }
如果 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,使用该标准的网站可以提前撤销固定了。
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/51013.html