Public-Key-Pins 头还能用吗?配置后浏览器报错怎么办?

IT人成娟 阅读 2

我在项目里尝试加了个 Public-Key-Pins 安全头,结果 Chrome 直接报“HPKP is deprecated”错误,页面都加载不了了。查了下资料说这玩意儿已经被废弃了?那现在该用什么替代啊?

我是在 React 项目的 Nginx 配置里加的 header,但本地开发时也想模拟一下,就试了在代码里加 meta 标签(虽然知道可能无效),类似这样:

import React from 'react';

function App() {
  // 尝试在 useEffect 里设置 header(其实知道前端设不了,但还是试了)
  React.useEffect(() => {
    // 没用,但当时慌了就乱试
  }, []);

  return <div>Hello</div>;
}

现在彻底懵了,到底要不要配 HPKP?如果不用,怎么保证证书公钥不被中间人替换?

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
一玉娅
一玉娅 Lv1
HPKP确实已经被各大浏览器废弃了,主要是这玩意太容易搞砸网站。万一你配错了或者CA轮换密钥,用户就直接被锁在外面进不来了,典型的"安全过头反而不安全"。

现在改用Expect-CT头吧,虽然它也要被废弃了(安全圈就是这么折腾),但目前还能用。更靠谱的方案是直接上Certificate Transparency,配合TLS 1.3基本够用了。

Nginx里可以这么配:
add_header Expect-CT 'max-age=86400, enforce, report-uri="https://example.com/report"';


本地开发就别折腾这些了,直接用localhost开发时浏览器本来就会宽松处理。真要模拟的话建议上mkcert搞个本地证书,比折腾这些header实在多了。

说到中间人攻击,现在靠谱的CA基本都会加入Certificate Transparency日志,加上TLS 1.3的完善,被中间人替换的概率已经很低了。实在担心的话可以定期检查证书指纹,比HPKP这种自杀式防御靠谱多了。
点赞
2026-03-07 15:05