Public-Key-Pins 头还能用吗?为什么浏览器报错?

爱学习的钰曦 阅读 27

最近在配置安全头时加了 Public-Key-Pins,结果 Chrome 控制台直接报警告说不支持了。我查了下文档有点懵,这玩意儿到底还能不能用?是不是已经被废弃了?

我之前是这么配的:

Public-Key-Pins: pin-sha256="base64=="; max-age=2592000; includeSubDomains

现在是不是应该换成别的策略?比如 Expect-CT 或者直接依赖证书透明度?

我来解答 赞 7 收藏
二维码
手机扫码查看
2 条解答
程序员涵舒
Public-Key-Pins 确实已经不再被现代浏览器支持了,Chrome 和 Firefox 在几年前就开始逐步弃用了这个头。我之前也碰到过类似的情况,当时也是挺懵的。

你现在看到的警告就是因为它已经被废弃了。浏览器不再识别这个头了,所以会报错。

你现在应该用的是 Public-Key-Pins-Report-Only 来测试你的配置,不过这个也会被移除。更好的替代方案是使用 Expect-CT (Expect Certificate Transparency)。Expect-CT 用于确保你的证书符合证书透明度的标准,这有助于检测中间人攻击。

你可以这样配置 Expect-CT:
pre class="pure-highlightjs line-numbers">Expect-CT: enforce, max-age=2592000, report-uri="https://yourdomain.com/reporting-endpoint"

记得替换 "https://yourdomain.com/reporting-endpoint" 成你实际的报告接收地址。

至于证书透明度,这通常是自动处理的,只要你的证书是从受信任的 CA 获取的,并且这些 CA 支持证书透明度,你应该就没问题。

希望这能解决你的问题!如果有啥其他疑问尽管问我。
点赞
2026-03-20 23:06
一硕
一硕 Lv1
Public-Key-Pins 确实已经被废弃了,从 Chrome 80 开始就已经移除了对它的支持。你看到的警告就是这个原因。不过也不用担心,现在有更好的替代方案。

你可以考虑使用 Expect-CT(Expect Certificate Transparency)来代替。Expect-CT 可以帮助你在证书透明度日志中检查证书的有效性,比 Public-Key-Pins 更安全可靠。

配置 Expect-CT 的方法如下:

Expect-CT: max-age=86400, enforce, report-uri="https://yourdomain.com/reporting-endpoint"


这里 max-age 是告诉浏览器多长时间内应该强制执行 CT 策略,enforce 表示如果证书不在透明度日志中,浏览器应该阻止连接,report-uri 是一个可选参数,用于指定一个 URI,浏览器会在发现不符合策略的证书时向该 URI 发送报告。

记得替换 report-uri 中的 URL 为你自己的报告接收地址,这样可以帮助你监控潜在的安全问题。

另外,证书透明度本身是 Google 提出的一个项目,现代浏览器已经默认启用了它,所以即使你不手动设置 Expect-CT,浏览器也会自动进行证书透明度检查。不过手动配置可以让你更精细地控制这个过程。
点赞
2026-03-20 23:00