在具有 nginx Web 服务器的服务器上设置了带有密钥锁定的 SSL 部分:
add_header Public-Key-Pins 'pin-sha256="some-key"; pin-sha256="second-key"; max-age=5184000;' always;
现在证书已过期并重新颁发,我为新证书生成了一个新的 base64 字符串,nginx -t
显示配置文件语法正确,但当我访问该网站时,我看到错误 -MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE
所以我想问一下——有没有办法通过密钥固定来更新服务器上的证书,而无需用户停机?
清除浏览器中的用户数据是不可接受的。
答案1
您有多种选择:
使用同一密钥重新颁发新证书。最佳做法是使用新密钥,而不是重复使用,因此可以说 HPKP(据称有利于安全)鼓励了不良的安全做法。
拥有备份密钥/csr/证书。最佳做法是在需要时生成,这样就不会泄露密钥,否则需要安全存储,因此可以说 HPKP(据称对安全性有益)鼓励了不良的安全做法。事实上,只有当您将另一个密钥的 PIN 作为鼓励此选项的安全功能包含时,浏览器才会识别 HPKP。
提前生成您的 csr 或证书*l(至少提前 max-age)并更新您的 HPKP 标头以包含 max-age 时间内的新证书 pin,然后切换证书,最后从 HPKP 标头中删除旧证书。当然,如果密钥被泄露并且您需要快速切换,那么这不是一个选择,因此可以说 HPKP(据称对安全性有益)鼓励了不良的安全做法。
将中间/根证书包含在您的 HPKP 策略中。希望您的 CA 永远不会更改中间或根证书,或停止营业,或者您想要切换 CA。如果发生任何这些情况,那么您就完蛋了。
忘掉它吧,当您需要重新颁发证书时,您的网站将无法继续使用,从而影响大部分用户的网站使用。此选项的安全性很好,但实用性却大大降低。
我在这里的评论是其中的一些原因HPKP 正在从浏览器中删除- 这是一个不切实际的想法,对于大多数网站来说,当你考虑它带来的额外安全性与它所增加的风险时,这是过度的(因为我在这里写了博客)。