知识卡片
HPKP证书指纹锁定:防止CA信任链本身被攻破后签发的伪造证书被信任
内容
HTTPS的信任体系建立在证书颁发机构(CA)之上,理论上任何一个被浏览器信任的CA都有能力签发出某个域名的证书,这就带来一个薄弱环节:如果某个CA本身不良、或者被黑客攻破盗取了签发权限,攻击者就可能拿到一份”未经网站真正所有者授权、却能被浏览器正常信任”的伪造证书,用来实施中间人攻击,而这种攻击从证书本身的技术层面看是完全”合法”的(因为确实是由一个受信任的CA签发的),常规的证书校验机制根本发现不了问题。HPKP(HTTP公钥固定)解决的是这个信任链本身可能被攻破的问题:网站提前把自己证书对应的公钥指纹通过响应头告诉浏览器,之后浏览器每次和这个域名建立HTTPS连接时,都会额外检查当前使用的证书公钥指纹是否匹配之前记录的那一份,如果不匹配(即使这份新证书本身是由受信任的CA正常签发的),浏览器也会直接拒绝建立连接。这个案例揭示了信任体系设计中一个常见的隐患模式:当一个安全机制的可信度建立在一组”外部第三方(这里是所有CA)都值得信任”的假设之上时,只要其中任何一个第三方出现问题,整套机制的可信度就会被击穿;更稳妥的补充做法是让客户端提前锁定一份自己实际验证过的、更具体的凭证(这里是公钥指纹),不再无条件信任”任何一个受信任第三方签发的东西”。
参考来源
- 位置:《高可用架构(第1卷)》第7章《安全与网络》"7.5 互联网主要安全威胁分析及应对方案"节,"7.5.2 威胁应对方案","5.HTTPS"(源文件:_epub-src/OEBPS/Text/Chapter7_5_3.xhtml)
- 结论依据:原文说明"还有一种威胁来自不良CA,或CA被黑客盗签证书,即黑客有可能在未经授权的情况下获得被浏览器认证的CA证书。我们可以通过HPKP解决这个问题,基本原理就是把证书的公钥指纹写入到客户端浏览器中,而在浏览器中建立HTTPS链接时会判断这个指纹是否匹配,如果不匹配则拒绝建立链接",直接支撑本卡片结论。
- 原始内容:还有一种威胁来自不良CA,或CA被黑客盗签证书,即黑客有可能在未经授权的情况下获得被浏览器认证的CA证书。我们可以通过HPKP解决这个问题,基本原理就是把证书的公钥指纹写入到客户端浏览器中……如果不匹配则拒绝建立链接。