什么是证书锁定?
证书锁定(certificate pinning)对哪些证书对于某一特定网站被视为有效进行限制,从而限制风险。运营者“锁定(pin)”证书颁发机构(CA)颁发者、公钥、甚至是其自行选定的终端实体证书,而不是允许任何可信证书的使用。连接到该服务器的客户端会将所有其他证书视为无效,并拒绝建立HTTPS连接。
证书锁定可以让网站控制误颁发、CA遭受攻击或中间人攻击的风险。根据用例情况,证书锁定可采用多种形式——我可以将我的证书锁定为我的客户端信任存储区中的唯一证书,也可以将公钥哈希写入我的代码,从而仅让我的密钥受到信任。当时证书锁定开始流行的时候,人们希望这些更多重的复杂性能提高坏人在攻击或骗局中利用证书的难度。
2011年,谷歌成为率先使用证书锁定的企业之一,当时他们在Chrome浏览器中将为其主要网站颁发证书的CA进行锁定。当Chrome连接到google.com时,它就已经知道要接受哪些CA。如果出现的是任何其他CA所颁发的证书,那么连接将被阻止。这意味着即使攻击者设法欺骗任何其他受信任的CA为其提供google.com的证书,Chrome也仍然会阻止此证书。
几年之后,Chrome和Firefox开始允许网站使用HTTP公钥锁定(HPKP)标头。在您的浏览器第一次使用HPKP连接到网站时,它会记录标头中的公钥,并且在它每一次连接到该网站时都仅会接受该密钥,直至HPKP策略中定义的“最长使用期限”到期为止。如果设置的最长使用期限为60天,那么接下来的60天其他任何密钥都不会被接受。
与此同时,证书锁定也被引入了应用程序、物联网设备,以及其他软件。使用类似方法,应用程序可以锁定证书,这样的话如果连接没有使用锁定的证书,那么应用程序就会拒绝与服务器的任何连接,从而保护用户免受中间人攻击。
正确实施这些做法可以增强安全性,但是不久之后Web社区就发现证书锁定并不是这样一个绝妙的主意。
证书锁定会出什么问题?
证书锁定、尤其是使用HPKP锁定,具有极大的风险而且容易出错。如果您对锁定设置进行了不正确的配置,那么您可能会阻止对自己网站的访问或中断您的应用程序的连接,而且求助的选择也很有限。以下是锁定可能会造成的几种危害。
密钥泄露
HPKP的一种常见做法是将终端实体证书公共密钥锁定于某网站,期限60天。许多网站没有指定任何备份密钥,可能是因为他们不知道有这个选项,或者是他们低估了使用单一密钥的风险。
这使得网站容易遭受密钥泄露的危险。行业标准要求CA必须在24小时内吊销已泄露的证书——可能是通过不安全的Web服务器失窃,或是意外上传到了公共GitHub存储库。由于唯一的锁定密钥已经泄露,没有可以替换的密钥,而且记录HPKP策略的客户端已经记住了无效密钥并且不允许使用新证书进行的连接。
黑客
HPKP是黑客破坏网站并造成长期破坏的一种绝佳方法。如果我接管了您的服务器并为一个假密钥设置了假冒HPKP策略以及一年的最长使用期限,那么浏览器将始终无法进行连接。在您重新接管服务器后的很长一段时间,您仍然会受到这一HPKP策略的影响,而且这一问题很难解决。
证书颁发机构吊销证书
有些时候CA必须吊销您的证书。可能审计稽核显示出证书先前存在未知问题,例如主题名称中的拼写错误或OU字段中的无效条目。行业标准规定,CA有五天的时间来吊销您的证书,但是您已将其锁定于您的客户端代码之中。您怎样才能在五天之内完成所有客户端的更新,以便开始使用新的替换证书?
弊大于利
由于这些问题的存在,再加上安全有效地实施锁定困难重重,因此通过锁定而使网站受到伤害的案例多于通过锁定而使网站受到保护的案例。由锁定造成的几个问题导致谷歌和Firefox在HPKP被引入仅仅几年之后就移除了HPKP支持。
锁定的最大问题在于它使您失去了应对证书问题的能力。如果出于任何原因您需要更改密钥、证书、颁发者或CA供应商,那么您必须要搞定您的客户端、浏览器、代码、物联网设备等等——而且有时候必须在短时间内完成。如果您需要连续多年支持某个应用程序版本并且其中包含一个锁定的证书,那么您怎样才能确保证书在应用程序的整个生命周期中一直处于有效状态?对于公共信任TLS证书来说,锁定的问题尤为突出,这是因为这类证书必须遵循不断发展变化的规则、不断缩短的最长有效期并应对其他突发问题。
幸运的是,HPKP已经成为了过去,而且DigiCert也并未大力支持其他类型的公钥锁定。DigiCert建议您不要使用锁定;它的复杂性和影响远超过它的优势。
DigiCert在开展哪些工作以阻止不适当的锁定?
尽管近年来我们没有建议或指导用户实施锁定,但用户仍然可以自行设置锁定。本周,DigiCert将对自己的CA层次结构进行更改。我们将开始使用有效期较短的版本来替换我们的公共TLS颁发中继CA(ICA),新版本每六个月更新一次。当然,中继的有效期将足够长,超过使用ICA的六个月内颁发的所有一年期和两年期证书的有效期。较短的ICA有效期会阻碍锁定,因为它们的变化频率更高了。
我们将首先使用新的GeoTrust TLS DV RSA Mixed SHA256 2020 CA-1和RapidSSLTLS DV RSA Mixed SHA256 2020 CA-1替换用于域名验证(DV)颁发的GeoTrust RSA CA 2018和RapidSSLRSA CA 2018中继。六个月后,GeoTrust TLS DV RSA Mixed SHA256 2021 CA-1和RapidSSL TLS DVRSA Mixed SHA256 2021 CA-1将对其进行替换,再过六个月后,*2021 CA-2版本再次进行替换,依此类推。
在接下来的几个月中我们将替换更多的CA,直到所有默认的公共TLS颁发者都实现每六个月一次的轮换。这些替换的时间表将发布于此处:
除了让大家不再理会锁定之外,缩短的ICA有效期还具有其他优势。它会把证书划分到更小的存储桶中,因此对同一CA颁发的一组证书的更改将不会一直影响其他证书。如果必须弃用某一ICA,它也仅会影响CA可有效颁发证书的六个月中所颁发的证书,并仅会影响该CA允许的特定类型的证书。