使用HPKP防止中间人攻击

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

HPKP可以通过绑定你信赖的CA或证书的公钥sha256指纹来避免伪造证书造成的中间人攻击。

启用HPKP

生成Public Key指纹

pin-sha256 一般推荐使用中间证书生成指纹,也可以选择像Symantec(前身VeriSign)这样的行业知名CA的根。

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"

清除浏览器HSTS缓存

在Chrome地址栏打开 chrome://net-internals/#hstsDelete domain 中删除要清空的域名即可。这里只是你本地缓存。

常见CA Public Key指纹

这里整理了部分常见CA的Public Key指纹,方便使用。

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

相关安全事件

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 67 queries in 0.377 seconds