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/。我认为这可能是一个非常危险的选择,在实施之前需要仔细考虑。
它确实有效...我的错误是我测试它的方式。
所以这是我错过的最重要的事情:
- 您至少需要一根备用图钉
- 如果您测试它,请不要更改 header 中的散列,而是 SSL-Certificate 或(更好)尝试更改本地保存的散列。或者感谢
BazzaDP
指出尝试使用 https://report-uri.io/home/pkp_analyse.
如果您是 HPKP 的新手并想开始使用它,请阅读 BazzaDP 的回答。 Mozilla 也有一些很好的文档。
你好,我正在尝试在我的 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/。我认为这可能是一个非常危险的选择,在实施之前需要仔细考虑。
它确实有效...我的错误是我测试它的方式。
所以这是我错过的最重要的事情:
- 您至少需要一根备用图钉
- 如果您测试它,请不要更改 header 中的散列,而是 SSL-Certificate 或(更好)尝试更改本地保存的散列。或者感谢
BazzaDP
指出尝试使用 https://report-uri.io/home/pkp_analyse.
如果您是 HPKP 的新手并想开始使用它,请阅读 BazzaDP 的回答。 Mozilla 也有一些很好的文档。