什么是HTTP公钥固定(HPKP)以及如何添加此功能。 原创 qtwrk 2017-11-05 05:11 阅读 1,747 次 评论 0 条 介绍转自维基百科。HTTP公钥固定(又称HTTP公钥钉扎,英语:HTTP Public Key Pinning,缩写HPKP)是HTTPS网站防止攻击者使用CA错误签发的证书进行中间人攻击的一种安全机制,用于预防诸如攻击者入侵CA偷发证书、浏览器信任的CA签发伪造证书等情况。采用该机制后,网站服务器会提供一个公钥哈希列表,客户端在后续通讯中将只接受该列表上的一个或多个公钥。 工作原理服务器通过Public-Key-Pins(或Public-Key-Pins-Report-Only用作仅回报)HTTP头向浏览器传递HTTP公钥固定信息。HTTP公钥固定将网站X.509证书链中的一个SPKI(和至少一个备用密钥)以pin-sha256方式进行哈希,由参数max-age(单位秒)所指定一段时间,可选参数includeSubDomains决定是否包含所有子域名,另一个可选参数report-uri决定是否回报违反HTTP公钥固定策略的事例。在max-age所指定的时间内,证书链中证书的至少一个公钥须和固定公钥相符,这样客户端才认为该证书链是有效的。RFC 7469规范发布时只允许SHA-256算法。HTTP公钥固定中的哈希算法也可通过RFC 7469规范的附录A中所提到的命令行或其他第三方工具来生成。网站维护者可以选择将特定CA根证书公钥固定——只有该CA和其签发的中级证书才视同有效,而且可以选择将一个或多个中级证书固定,或将末端证书固定。但是,至少得固定一个备用密钥以便更换现有的固定密钥。在没有备用密钥(备用密钥须不在现有证书链中)时,HTTP公钥固定并不会生效。HTTP公钥固定在RFC 7469规范中成为标准。把证书公钥的哈希值硬编码在客户端、浏览器中,这被称为“证书固定”,HTTP公钥固定则是“证书固定”的一种扩展。Chromium浏览器现已经禁止固定自签名根证书的证书链,这样一些内容嗅探、抓包软件如mitmproxy、Fiddler便无法再利用自签证书嗅探加密内容。RFC 7469规范指出,对于此类证书链,建议禁用HTTP公钥固定的违规回报。 如何为网站添加HPKP首先,访问哈希生成器,输入你的网址,即可获得当前证书的哈希值获得哈希值后,添加到http header中, 一般来说, 建议使用中级证书的哈希值,并且放一个备份证书比如本站的HPKP就使用了 Cloudflare的中级证书哈希和Let's Encrypt的中级证书哈希。 其中CF的做首选,LE的做备份,比如哪天我停止使用CF,以LE证书做代替,就不会出现无法访问的情况了。 如何添加到http header:LiteSpeed和Apache服务器可以通过 .htaccess文件编辑添加以下内容:Header set Public-Key-Pins 'pin-sha256="证书的哈希值1"; pin-sha256="证书的哈希值2"; pin-sha256="证书的哈希值3"; max-age=2592000'将其中 证书的哈希值1,2,3 替换为你得到的哈希值, 最后的时间2592000为作用时间,单位为秒,可以先设置短时间,比如300秒以做测试,避免出现错误后自己无法访问,等确定一切就绪后,再设置为长时间。 Nginx通过.conf配置文件打开网站的.conf文件,添加add_header Public-Key-Pins 'pin-sha256="证书的哈希值1"; pin-sha256="证书的哈希值2"; pin-sha256="证书的哈希值3"; max-age=2592000';执行命令nginx -t 检查是否有错误,如果没有,执行nginx -s reload重读配置文件 如何检查自己的HPKP是否配置正确方法一:通过开发者工具,检查http header比如本站的响应头如下 方法二:在线检查工具 本文地址:https://vps.group/hpkp-20171105.html 版权声明:本文为原创文章,版权归 qtwrk 所有,欢迎分享本文,转载请保留出处! 3人喜欢 赞赏 PREVIOUS:如何给CentOS7安装最新版BBR内核 NEXT:什么是HTTP严格传输安全(HSTS)以及如何添加此功能文章导航