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浏览器
- 微软边缘
- 苹果浏览器