说明

HPKP,即公钥固定,是很久很久以前推出的一项预防中间人攻击的消息头,现在已被证书透明度(CT)替代。

目前支援Public-Key-Pins的浏览器几乎没有。

开启Public-Key-Pins(公钥固定)以获得额外的小绿标-魔王冰梦的王殿
兼容性

2017年10月,Google安全团队宣布:由于公钥固定(HTTP Public Key Pinning,简称HPKP)普及率低和存在技术挑战,计划解除对HPKP的支持。

至此,Public-Key-Pins几乎等于被宣告死亡。

但是,某不安全CA公司下属MySSL - SSL安全测试网站仍然提供HPKP的可选项,并且还用颜色特别高亮了...所以咱在伺服器端也增加了HPKP支援。

开启Public-Key-Pins(公钥固定)以获得额外的小绿标-魔王冰梦的王殿
这应该是迄今为止最安全的千羽喵了(笑)

注意:不建议在生产环境启用HPKP,否则可能导致严重后果(?)。

获取证书指纹

目前网络上的各种教程都是借助openssl获取证书指纹...可惜咱在操作过程中碰到了无数error...

由于咱不懂技术qaq,只好想办法曲线救国,于是找到了MySSL的线上查看证书功能,只要上载证书就可以获得证书指纹,方便快捷~

根据最佳实践,推荐使用二级证书的指纹,所以咱使用的是GeoTrust EV RSA CA 2018(现在正在用的)主证书,以及SwissSign Server Gold CA 2014 - G22作为后备证书(至少有两张证书,其中一张存在于当前证书链,另一张则不可存在于当前证书链)。

开启Public-Key-Pins(公钥固定)以获得额外的小绿标-魔王冰梦的王殿
二级证书

然后打开MySSL的链接,上载,找到“公钥PIN-SHA256”,复制就好啦~

开启Public-Key-Pins(公钥固定)以获得额外的小绿标-魔王冰梦的王殿
图例

添加消息头

打开Nginx的conf配置文件,在server { }中添加一行~

将其中pin-sha256=“”内容更改成自己的就可以啦~

add_header Public-Key-Pins 'pin-sha256="yWulDX8E5Q0XG4+9jVDljmO2FvAVzIRhn2MppW4vyUM="; pin-sha256="skyozdmp140ljrHvjRijq3v2/yQ1nyfFyBiA9uOKuw8="; max-age=2592000; includeSubDomains';

公钥固定报告

在MySSL公钥固定项目的下方还有一个公钥固定报告项,在查阅文档后发现公钥固定事实上还有一个回报模块,即图一中添加的“report-uri="https://qy.is/hpkp.html"”,但是添加此项之后公钥报告仍然显示不支持...

所以咱也不确定此项到底是什么了...它也没有解释...

验证

配置完成之后建议先不要访问站点...否则万一配置错误就要等待两个月之后才能访问了(不过现在浏览器好像都不支援...?反正咱不敢尝试的说qaq)...

使用SSL Labs测试,然后找到Public Key Pinning (HPKP)项目,如果有一个pin-sha256使用的是粗体则代表配置没有问题的说。

开启Public-Key-Pins(公钥固定)以获得额外的小绿标-魔王冰梦的王殿
图例

以上。

(碎碎念:为什么喜欢用以上做结尾...是因为如果没有总感觉后面空荡荡的很奇怪...但是又不知道写什么...只好用以上做结语了qaq...但是现在好像很多人都很讨厌这样子...唔,不管他们的说qwq)