![为所有证书链生成HPKP指纹](https://linux22.com/image/112092/%E4%B8%BA%E6%89%80%E6%9C%89%E8%AF%81%E4%B9%A6%E9%93%BE%E7%94%9F%E6%88%90HPKP%E6%8C%87%E7%BA%B9.png)
从下面的命令能够仅为第一个深度证书生成 Base64 引脚。但需要为所有深度的证书生成 pin。
openssl s_client -servername example.com -connect example.com:443 -showcerts
| openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
只提供一把钥匙而不是三把,
cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=
那么,我们如何生成所有三个级别的引脚呢?
答案1
尽管我基本上同意罗密欧的观点,即您应该已经在服务器上拥有证书文件,如果您做需要处理来自一个的多个证书,s_client
您可以执行以下操作:
openssl s_client ..... -showcerts \
| awk '/-----BEGIN/{f="cert."(n++)} f{print>f} /-----END/{f=""}'
# or input from bundle or chain file
for c in cert.*; do
openssl x509 <$c -noout -pubkey .....
done
rm cert.*
# use better temp name/location if you want
答案2
您可以从证书中提取颁发者(颁发者的 CN)。但从现在起,您应该通过在颁发者网站上搜索来手动获取此证书。如果您有权访问 Web 服务器,您将在文件系统中找到证书,并在带有 CA 证书的文件上运行脚本