Public-Key-Pins 头还能用吗?配置后浏览器报错怎么办?
我在项目里尝试加了个 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?如果不用,怎么保证证书公钥不被中间人替换?
现在改用
Expect-CT头吧,虽然它也要被废弃了(安全圈就是这么折腾),但目前还能用。更靠谱的方案是直接上Certificate Transparency,配合TLS 1.3基本够用了。Nginx里可以这么配:
本地开发就别折腾这些了,直接用
localhost开发时浏览器本来就会宽松处理。真要模拟的话建议上mkcert搞个本地证书,比折腾这些header实在多了。说到中间人攻击,现在靠谱的CA基本都会加入Certificate Transparency日志,加上TLS 1.3的完善,被中间人替换的概率已经很低了。实在担心的话可以定期检查证书指纹,比HPKP这种自杀式防御靠谱多了。