Public 键固定不起作用

Public Key Pinning not working

你好,我正在尝试在我的 apache 服务器 运行 上实现 Public-Key-Pinning 作为另一个 web-app 的代理,但它不会工作(如果我输入了错误的哈希页面仍然显示而不是错误,应该在 Firefox 或 Chrome 中显示)。我确定 header 是正确的——散列是正确的,我用 Chrome.

测试过它

我的配置数据是

<VirtualHost *:443>
ServerName subdomain.*******.***:443
SSLCertificateFile /etc/apache2/ssl/___.crt
SSLCertificateKeyFile /etc/apache2/ssl/___.key
SSLCertificateChainFile /etc/apache2/ssl/___.ca
Header always set Public-Key-Pins "pin-sha256=\"****\"; pin-sha256=\"****\";  max-age=120; includeSubDomains"

    <Proxy *>
       Order deny,allow
       Allow from all
   </Proxy>

    ProxyPass / ****:****/
    ProxyPassReverse / ****:****/
    <Location />
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>

起初我只有一个散列,但我添加了第二个散列以防万一。我做错了什么?

注意:我当然启用并加载了 mod_header。

需要两个哈希值,并且它们必须是两个独立的哈希值。 IE。您不能固定颁发该证书的证书和中间证书,因为它们不是独立的。这是一项安全功能,可确保您有备份以备不时之需。

此外,政策只有在通过后才会被接受,因此您不能输入虚假政策并看着它失败,因为它永远不会被接受。

检查政策的好工具是这个:https://report-uri.io/home/pkp_analyse 以及同一站点上实际生成您的策略的其他工具: https://report-uri.io/home/pkp_hash

但是您需要非常小心地使用 HPKP。阻止您的网站非常容易,希望您不要误会,听起来您并不完全理解 HPKP,所以我建议您先多读一些。

有一个 Public-Key-Pins-Report-Only(目前仅在 Chrome 中可用),它允许您稍微测试一下策略(在Chrome 至少)但是为此你还需要使用 report-uri 选项(如果你不想为此编写自己的服务,你也可以使用上面的站点来收集你的报告)。

我对此很感兴趣,如果人们不介意我在这里链接,我已经在博客上更详细地介绍了它:https://www.tunetheweb.com/security/http-security-headers/hpkp/。我认为这可能是一个非常危险的选择,在实施之前需要仔细考虑。

它确实有效...我的错误是我测试它的方式。

所以这是我错过的最重要的事情:

  1. 您至少需要一根备用图钉
  2. 如果您测试它,请不要更改 header 中的散列,而是 SSL-Certificate 或(更好)尝试更改本地保存的散列。或者感谢 BazzaDP 指出尝试使用 https://report-uri.io/home/pkp_analyse.

如果您是 HPKP 的新手并想开始使用它,请阅读 BazzaDP 的回答。 Mozilla 也有一些很好的文档。