本页使用了标题或全文手工转换

HTTP公钥固定

维基百科,自由的百科全书
跳转至: 导航搜索

HTTP公钥固定(又称HTTP公钥钉扎英语:HTTP Public Key Pinning,缩写HPKP[1]HTTPS网站防止攻击者使用CA错误签发的证书进行中间人攻击的一种安全机制,用于预防诸如攻击者入侵CA偷发证书、浏览器信任的CA签发伪造证书等情况。采用该机制后,网站服务器会提供一个公钥哈希列表,客户端在后续通讯中将只接受该列表上的一个或多个公钥。

工作原理[编辑]

服务器通过Public-Key-Pins(或Public-Key-Pins-Report-Only用作仅回报)HTTP头向浏览器传递HTTP公钥固定信息。

HTTP公钥固定将网站X.509证书链中的一个SPKI(和至少一个备用密钥)以pin-sha256方式进行哈希,由参数max-age(单位秒)所指定一段时间,可选参数includeSubDomains决定是否包含所有子域名,另一个可选参数report-uri决定是否回报违反HTTP公钥固定策略的事例。在max-age所指定的时间内,证书链中证书的至少一个公钥须和固定公钥相符,这样客户端才认为该证书链是有效的。[2]

RFC 7469规范发布时只允许SHA-256算法。HTTP公钥固定中的哈希算法也可通过RFC 7469规范的附录A中所提到的命令行或其他第三方工具来生成。[3]

网站维护者可以选择将特定CA根证书公钥固定——只有该CA和其签发的中级证书才视同有效,而且可以选择将一个或多个中级证书固定,或将末端证书固定。但是,至少得固定一个备用密钥以便更换现有的固定密钥。在没有备用密钥(备用密钥须不在现有证书链中)时,HTTP公钥固定并不会生效。[4]

HTTP公钥固定在RFC 7469规范中成为标准。[1]把证书公钥的哈希值硬编码在客户端、浏览器中,这被称为“证书固定”,HTTP公钥固定则是“证书固定”的一种扩展。[5]

Chromium浏览器现已经禁止固定自签名根证书的证书链,这样一些内容嗅探、抓包软件如mitmproxyFiddler便无法再利用自签证书嗅探加密内容。[6]RFC 7469规范指出,对于此类证书链,建议禁用HTTP公钥固定的违规回报。[7]

违规回报[编辑]

客户端进行HTTP公钥固定验证失败后,将把此次错误详情以JSON格式回报给report-uri参数中指定的服务器。若发生客户端向同域名的服务器端回报失败(如违规本身就是由连接问题引起的),服务器端也可指定另一个域名或采用其他回报服务。[8][9]

浏览器支持[编辑]

Firefox从版本35.0开始[10]Chrome从版本46开始[11]支持HPKP。IE目前仍不支持,Edge对其的支持尚在官方考虑之中。[12]

应用现状[编辑]

2016年,Netcraft英语Netcraft在有关SSL的调研中称,只有0.09%的证书在使用HTTP公钥固定,加上实际运作中不当的配置,实际有效的HTTP公钥固定证书数量低于3000。造成这种现象的原因是:该技术尚处于萌芽期,网站技术人员对其缺乏重视和理解,更重要的是,错误的部署可能带来网站方面无法接受的严重后果——用户在相当长一段时间内(取决于max-age的配置)因新证书公钥与旧HPKP策略不符,对网站的合法访问都将遭拒。[13]

Google所主导的Certificate Transparency提供了一个用于监测、审核证书的开放式框架,以保障证书签发流程的安全。[14]这是一项和HTTP公钥固定有着相同目标的较新项目。

2017年10月,因为网站部署率过低,Google宣布计划在2018年5月29日发布的Chrome 67中移除对HPKP的支持。[15]

参见[编辑]

参考资料[编辑]

  1. ^ 1.0 1.1 RFC 7469. tools.ietf.org. Internet Engineering Task Force. [2016-12-04] (英语). 
  2. ^ Server and Client Behavior. RFC 7469. Internet Engineering Task Force. [2016-12-04] (英语). 
  3. ^ Fingerprint Generation. RFC 7469. Internet Engineering Task Force. [2016-12-04] (英语). 
  4. ^ About Public Key Pinning. noncombatant.org. [2015-05-07] (英语). 
  5. ^ Certificate and Public Key Pinning - OWASP. www.owasp.org. [2015-05-07]. 
  6. ^ Security FAQ - The Chromium Projects. www.chromium.org. [2015-07-07] (英语). 
  7. ^ Validating Pinned Connections. RFC 7469. Internet Engineering Task Force. [2016-12-04] (英语). 
  8. ^ HPKP Violation Reporting. Scott Helme (英语). 
  9. ^ Reporting Pin Validation Failure. RFC 7469. Internet Engineering Task Force. [2016-12-04] (英语). 
  10. ^ Public Key Pinning. mozilla.org. 2015-12-10 [2015-12-22] (英语). 
  11. ^ Rolling out Public Key Pinning with HPKP Reporting. Google Developers. 2016-11-30 [2016-12-05] (英语). 
  12. ^ The status of public key pinning extension in Microsoft Edge is under consideration. Microsoft. [2016-12-04] (英语). 
  13. ^ Paul Mutton. Secure websites shun HTTP Public Key Pinning. Netcraft. 2016-03-22 (英语). 
  14. ^ Google透明度报告中的Certificate Transparency. Google (中文). 
  15. ^ Chrome 将移除 Public Key Pinning (PKP)支持. Solidot. 2017-10-29 [2017-10-29] (中文). 

外部链接[编辑]