柒焰博客 柒焰博客

2018.4.21-HPKP

in 日记,分享,实用技巧 read (743) 文章转载请注明来源!

HTTP Public Key Pinning(HPKP)是为了防止其他可信CA未经你的授权(也许是因为身份审核疏忽)为你的网站颁发证书,并用于中间人攻击(数据截获分析) 。对于浏览器来说,只要是一家已预埋根证书的可信CA颁发的证书,信任状态都是一样的,用户一般也很难识别出来是否存在伪造。

GIF

值得一提的是,谷歌了提高互联网整体的安全性避免因证书颁发机构违规操作而设计了 HPKP 公钥固定标准。公钥固定允许网站在服务器部署证书颁发机构的哈希值, 若网站使用的证书与固定的哈希不对应则拒绝连接。公钥固定的现实意义在于如果有CA证书颁发机构违规向某个域名私自签发证书那么也无法实现对网站的劫持。但是现在谷歌浏览器已经决定弃用 HPKP 公钥固定标准,预计将会在2018 年5月份到来的正式版里正式弃用,但是这并不影响博主我的折腾。

启用HPKP
生成Public Key指纹
pin-sha256 使用中间证书生成指纹

PEM格式证书(常见 ):

openssl x509 -in "Let's Encrypt Authority X3.pem" -pubkey -noout | openssl rsa -pubin -outform         der | openssl dgst -sha256 -binary | openssl enc -base64

DER格式证书:

openssl x509 -inform der -in "VeriSign Class 3 Public Primary Certification Authority - G5.cer" -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

添加HTTP响应头

max-age 单位是秒,2592000 = 一个月

Nginx:

add_header Public-Key-Pins 'pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg="; pin-sha256="JbQbUG5JMJUoI6brnx0x3vZF6jilxsapbXGVfjhN8Fg="; max-age=2592000; includeSubDomains';

Apache:

    Header always set Public-Key-Pins "pin-sha256=\"YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=\"; pin-sha256=\"JbQbUG5JMJUoI6brnx0x3vZF6jilxsapbXGVfjhN8Fg=\"; max-age=2592000; includeSubDomains"

常见CA Public Key指纹

CA通用名称(CN字段)级别Public Key SHA256指纹
Let’s Encrypt Authority X3中级YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=
Let’s Encrypt Authority X4中级sRHdihwgkaib1P1gxX8HFszlD+7/gTfNvuAybgLPNis=
TrustAsia DV SSL CA - G5中级IiSbZ4pMDEyXvtl7Lg8K3FNmJcTAhKUTrB2FQOaAO/s=
TrustAsia DV SSL CA - G6中级MUj3ElSyDVu0X3TYBNY9f0axqYEtb7fmFTLy2Z8/l+Y=
DST Root CA X3 (Let’s Encrypt根)Vjs8r4z+80wjNcr1YKepWQboSIRi63WsWXhIMN+eWys=
VeriSign Class 3 Public Primary Certification Authority - G5JbQbUG5JMJUoI6brnx0x3vZF6jilxsapbXGVfjhN8Fg=
jrotty WeChat Pay

微信打赏

jrotty Alipay

支付宝打赏

文章二维码

扫描二维码,在手机上阅读!

本文基于《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
文章链接:https://wangwenbo.cn/archives/104.html (转载时请注明本文出处及文章链接)

日记分享实用技巧
发表新评论
PREVIOUS NEXT
雷姆
拉姆