2

您好,我正在尝试在我的 apache 服务器上实现 Public-Key-Pinning,该服务器作为另一个 Web 应用程序的代理运行,但它不起作用(如果我输入错误的哈希,页面仍然显示而不是错误,这应该在 Firefox 或 Chrome 中显示)。我确定标题是正确的——哈希是正确的,我已经用 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。

4

2 回答 2

3

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

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

检查您的政策的一个好工具是:https ://report-uri.io/home/pkp_analysis 以及同一站点上实际生成您的政策的其他工具: 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/ . 我认为这可能是一个非常危险的选择,在实施之前需要仔细考虑。

于 2015-10-27T21:28:29.317 回答
0

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

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

  1. 您至少需要一个备用别针
  2. 如果您对其进行测试,请不要更改标头中的哈希,而是 SSL-Certificate 或(更好)尝试更改本地保存的哈希。或者感谢您BazzaDP指出尝试使用https://report-uri.io/home/pkp_analysis

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

于 2015-10-27T21:52:38.980 回答