公钥固定不起作用

时间:2015-10-27 17:51:54

标签: apache http-headers public-key pinning

您好我正在尝试在我的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。

2 个答案:

答案 0 :(得分:3)

需要两个哈希值,它们必须是两个独立的哈希值。即您不能固定证书和颁发的证书,因为它们不是独立的。这是一项安全功能,可确保您有所需的备份。

此外,只有在政策通过时才接受该政策,因此您不能制定虚假政策并观察其失败,因为它永远不会被接受。

检查政策的好工具是: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 :(得分:0)

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

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

  1. 您至少需要一个备用引脚
  2. 如果您测试它,请不要更改标头中的哈希,但要么更改SSL证书,要么(更好)尝试更改本地保存的哈希值。或者感谢BazzaDP指出它,请尝试使用https://report-uri.io/home/pkp_analyse
  3. 如果您不熟悉HPKP并希望开始使用它,请阅读BazzaDP的答案。 Mozilla也有一些很好的文档。