📜  HTTP 标头 |公钥引脚

📅  最后修改于: 2022-05-13 01:56:52.451000             🧑  作者: Mango

HTTP 标头 |公钥引脚

已弃用:不再推荐使用此功能。由于其复杂性和副作用,它在 2017 年被 Google Chrome 团队弃用。 Google 建议使用Expect-CT作为更好的选择。它已从 90% 的 Web 浏览器中删除,但某些浏览器仍然支持它,仅出于兼容性目的。

HTTP Public Keys Pinning (HPKP)是一种借助 HTTP 标头交付的 Internet 安全机制,它允许 HTTPS 网站抵抗使用滥用或欺诈数字证书的攻击者。这是通过向客户端(例如 Web 浏览器)提供一组公钥来实现的。这些密钥被传递给那些应该被信任的客户端,以便将来使用相同的域名进行连接。

例如,攻击者可能会入侵证书颁发机构,然后滥用 Web 源的证书。为了降低这种风险,HTTPS Web 服务器提供一个“固定”公钥哈希列表,这些哈希在给定时间内在后续连接中有效,在该有效时间内,客户端希望服务器在其中使用一个或多个公钥证书链。如果没有,则会在屏幕上打印一条错误消息。

Header type: Response header

句法:

Public-Key-Pins: pin-sha256 = "pin-value"; 
                 max-age = expire-time; 
                 includeSubDomains; 
                 report-uri = "uri"

指令

  • 销-sha256 =“销-值”
    该引脚用于为不同的公钥指定多个引脚。将来我们还可以使用除 SHA-256 之外的其他哈希算法。
  • 最大 - 年龄 = 过期时间
    此图钉表示浏览器应该记住使用定义的键之一访问该站点的时间(以秒为单位)。
  • 包括子域
    此图钉指定站点的规则也适用于站点的子域。此参数是可选的。
  • 报告 – uri = “uri”
    此 pin 发送 pin 验证失败的报告。该参数也是可选的。

例子

Public-Key-Pins: 
  pin-sha256 = "cUPcTAZWKaASuYWhhneY3oBAkE3h2+soZS7sWs="; 
  pin-sha256 = "M8HztCzM3elS5P4hhyBNf6lHkmjAHKhpGPWE="; 
  max-age = 51000; 
  includeSubDomains; 
  report-uri = "https://www.geeksforgeeks.org/hpkp-report"

在这个例子中,First pin pin-sha256 = “cUPcTAZWKaASuYWhhneY3oBAkE3h2+soZS7sWs=”是服务器在生产中使用的公钥。
第二个引脚pin-sha256 = “M8HztCzM3elS5P4hhyBNf6lHkmjAHKhpGPWE=”用作备份密钥。
第三个 pin max-age = 51000告诉客户端将此信息存储两个月(此时间限制由 IETF RFC 提供)。
第四个引脚includeSubDomains表示该密钥对所有子域都有效。
最后一个 pin report-uri = “https://www.geeksforgeeks.org/hpkp-report”解释了在哪里报告 pin 验证失败。

浏览器兼容性:下面列出了与Public-Key-Pins 标头兼容的浏览器:

  • 谷歌浏览器
  • 歌剧
  • 火狐
  • IE浏览器
  • 微软边缘
  • 苹果浏览器