2017年10月,Google安全团队在论坛上公开宣布:由于公钥固定(HTTP Public Key Pinning,简称HPKP)普及率低和存在技术挑战,计划于2018年5月发布的Chrome 67解除对HTTP HPKP的支持,公告一出马上引起行业内的热议。

HPKP具体是什么呢?本文详细介绍了HPKP的定义、存在的问题、以及取代它的CT项目等信息。

什么是HPKP

HPKP是HTTPS网站防止攻击者利用证书授权中心(Certificate Authority,简称CA)机构错误签发的证书进行中间人攻击的一种安全机制,它旨在预防攻击者入侵CA偷发证书、浏览器信任的CA签发伪造证书等情况。

HPKP公钥固定安全机制所携带的是中级证书或者根证书的哈希值,并与终端浏览器约定此哈希值会在一定时间(通常是1年)失效。

HPKP问题所在

安全隐患

参与撰写和制定该标准(RFC 7469)的谷歌工程师认为,HPKP并没有想象中的安全,甚至可以说存在极大的安全隐患。例如:

  • 恶意攻击者可以伪造HPKP头进行拒绝访问攻击

  • 证书发生泄露时需要进行吊销引发安全问题。因为吊销旧证书后再请求签发新证书只能选择此前固定的CA机构,你不能再选择新的CA机构为你签发证书。

普及率低

在各大浏览器中,目前仅有Firefox 35.0、Chrome 46之后的版本支持HPKP。其他如IE、Safari、Edge等浏览器都尚不支持。

根据调查,在2016年3月,所有HTTPS网站部署HPKP的比率为0.09%,全球只有不到4,100个证书。到2017年8月,部署率只提高到0.4%。另外,在实际应用中,这些网站中有四分之一以上是发生错误部署,从而导致有效使用HPKP的证书总数量低于3000个。

存在技术挑战

而造成这种现象的原因是:

  • 该技术尚处于萌芽期,网站技术人员对其缺乏重视和理解。

  • 更重要的是,错误的部署会为网站带来严重的后果,即用户在相当长一段时间内(取决于max-age的配置)因新证书公钥与旧HPKP策略不符,会导致用户对网站的合法访问变成拒绝访问。

  • 其次,就算正确配置HPKP的站点加强网站防御力,如果攻击者获得有效证书,从未访问过网站的浏览器仍有可能会受到中间人攻击。因为HPKP与HPKP不同,HPKP并没有可用的常见预载列表。

HPKP被替代

为了向用户提供加密流量,网站必须先向可信的CA机构申请证书。然后,当用户尝试访问相应网站时,此证书即会被提供给浏览器以验证该网站。近年来,由于 HTTPS 证书系统存在结构性缺陷,证书以及签发证书的 CA 很容易遭到入侵和操纵。

Google的证书透明度项目(英文为Certificate Transparency,简称CT),旨在通过提供一个用于监测和审核HTTPS 证书的开放式框架,来保障证书签发流程安全无误。更多相关信息,参阅Certificate Transparency概览