Public-Key-Pins 头还能用吗?为什么浏览器报错? 爱学习的钰曦 提问于 2026-03-20 22:40:21 阅读 27 安全 最近在配置安全头时加了 Public-Key-Pins,结果 Chrome 控制台直接报警告说不支持了。我查了下文档有点懵,这玩意儿到底还能不能用?是不是已经被废弃了? 我之前是这么配的: Public-Key-Pins: pin-sha256="base64=="; max-age=2592000; includeSubDomains 现在是不是应该换成别的策略?比如 Expect-CT 或者直接依赖证书透明度? 我来解答 赞 7 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 程序员涵舒 Lv1 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 加载更多 相关推荐 2 回答 42 浏览 Public-Key-Pins 头还能用吗?配置后浏览器报错怎么办? 我在项目里尝试加了个 Public-Key-Pins 安全头,结果 Chrome 直接报“HPKP is deprecated”错误,页面都加载不了了。查了下资料说这玩意儿已经被废弃了?那现在该用什么... IT人成娟 安全 2026-03-07 14:37:23 2 回答 63 浏览 Public-Key-Pins配置后浏览器报错,哪里出问题了? 我在本地测试环境配置了Public-Key-Pins头,但访问页面时Chrome直接显示证书错误,页面完全无法加载。之前已经按文档生成了证书的指纹,备用密钥也配置了,但还是报错: Public-Key... Tr° 洋泽 安全 2026-02-05 20:51:33 2 回答 48 浏览 配置Public-Key-Pins头后浏览器还是报证书错误怎么办? 我给网站配置了Public-Key-Pins头,参考了文档写死了当前证书和备用密钥的pin值,但访问时Chrome还是提示“证书无效”。明明证书指纹和includeSubDomains参数都对,是不是... 书生シ尚萍 安全 2026-02-05 15:38:39 1 回答 39 浏览 Hotkeys.js 为什么监听 Ctrl+Enter 不生效? 我用 Hotkeys.js 想监听 Ctrl+Enter 组合键提交表单,但怎么按都没反应,其他快捷键比如 'a' 或 'ctrl+s' 都能正常触发。是不是组合键写法有问题? 我试过写成 'ctrl... Zz晨硕 交互 2026-03-22 23:11:18 2 回答 28 浏览 keyup事件监听后为什么有时候不触发? 我在做一个输入框的实时搜索功能,绑定了 keyup 事件,但有时候快速输入或者按回车的时候,事件好像没触发,控制台也没输出。是不是我写法有问题? 这是我目前的代码: const input = doc... 仙仙 Dev 交互 2026-03-18 19:53:15 2 回答 53 浏览 keypress 事件为什么监听不到方向键? 我在写一个用键盘控制的小游戏,想用 keypress 事件监听方向键(上下左右),但发现根本没反应。查了下文档说 keypress 只对能产生字符的按键有效,那方向键这种功能键该怎么监听才对? 我试过... Newb.梓轩 交互 2026-03-16 13:00:23 1 回答 48 浏览 为什么在 Vue 里监听键盘事件时 keyCode 不生效? 我最近在用 Vue 做一个快捷键功能,想通过 keyCode 判断按的是哪个键,但发现它一直是 undefined。明明以前这么写是没问题的,是不是现在浏览器不支持了? 我试过在 @keydown 里... 西门丽苹 交互 2026-03-10 12:04:22 2 回答 32 浏览 Vite 中引用 public 目录下的图片为什么 404 了? 我刚接触 Vite,把一张 logo.png 放在了 public/images/ 目录下,然后在 HTML 里直接用相对路径引用,结果页面加载时图片显示 404。我试过用 /images/logo.... 司马艳清 前端 2026-03-02 15:52:18 2 回答 25 浏览 为什么 keypress 事件在 Vue 里监听不到方向键? 我最近在用 Vue 做一个简单的键盘控制功能,想用 keypress 监听方向键(比如左、右箭头),但发现完全没反应。查了文档说 keypress 只对能产生字符的按键有效,那是不是意味着方向键根本不... Mr-俊鑫 交互 2026-03-01 01:43:20 2 回答 127 浏览 为什么在 Vue 里监听键盘事件时 keyCode 不生效了? 最近在做一个搜索框的回车提交功能,发现用 event.keyCode === 13 判断回车键没反应了。查了下文档说 keyCode 已废弃,但换成 key 或 code 又不确定怎么写才兼容。我现在... Prog.秀莲 交互 2026-02-26 13:29:21
你现在看到的警告就是因为它已经被废弃了。浏览器不再识别这个头了,所以会报错。
你现在应该用的是 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 支持证书透明度,你应该就没问题。
希望这能解决你的问题!如果有啥其他疑问尽管问我。
你可以考虑使用 Expect-CT(Expect Certificate Transparency)来代替。Expect-CT 可以帮助你在证书透明度日志中检查证书的有效性,比 Public-Key-Pins 更安全可靠。
配置 Expect-CT 的方法如下:
这里
max-age是告诉浏览器多长时间内应该强制执行 CT 策略,enforce表示如果证书不在透明度日志中,浏览器应该阻止连接,report-uri是一个可选参数,用于指定一个 URI,浏览器会在发现不符合策略的证书时向该 URI 发送报告。记得替换
report-uri中的 URL 为你自己的报告接收地址,这样可以帮助你监控潜在的安全问题。另外,证书透明度本身是 Google 提出的一个项目,现代浏览器已经默认启用了它,所以即使你不手动设置 Expect-CT,浏览器也会自动进行证书透明度检查。不过手动配置可以让你更精细地控制这个过程。