是否可以在不禁用客户端公钥固定的情况下进行 SSL 拦截?

信息安全 tls 网络 乌贼 tls-拦截 hpkp
2021-09-03 18:02:36

我目前正在实验室中设置 pfSense 防火墙。它支持 SSL Inception,这对大多数网站都非常有效。

但是有些网站使用 HTTP 公钥固定来防止中间人攻击,这真的很痛苦,因为防火墙后面的系统不仅已经设置好,而且在某些情况下已经固定了公钥,这会破坏这些网站的 SSL。

解决此问题的一种方法是禁用 HPKP,这可以在 Firefox 中通过设置security.cert_pinning.enforcement_level0并且运行良好。有没有其他方法可以解决这个问题?

// 我尝试过的主机是一台装有 Iceweasel 浏览器的 Kali 机器。

显示给我的错误说连接是因为 HSTS 而断开的,这导致非常混乱,因为还有一些网站正在使用 HSTS,并且拦截工作得很好。然后我发现这似乎与 HPKP 有关,禁用它后 HSTS 错误不再出现。

这似乎是一个特定于软件的问题。在@Steffen Ullrich 向我指出这不应该发生之后,我尝试使用 Windows 7 客户端和 Chrome 作为浏览器,它工作得很好。

3个回答

在合法 SSL 拦截的情况下,用于为拦截的连接颁发证书的代理 CA 被显式导入到浏览器/操作系统中作为受信任的。在这种情况下,浏览器将忽略内置固定以及使用 HPKP 标头完成的固定。这样做是为了使合法的 SSL 拦截(在防火墙中,出于安全原因)成为可能。这意味着在这种情况下无需禁用公钥固定。

有没有其他方法可以解决这个问题?

是的,您可以配置 SSL 拦截工具以删除响应中的任何 HPKP 标头。

您需要所有用户都从专用浏览器配置文件开始,该配置文件仅在 SSL 拦截下使用。如果在没有 SSL 拦截的情况下使用相同的浏览器配置文件,则真实服务器可能会再次锁定其证书,并在用户重新启用 SSL 拦截时导致问题。

据我了解,HTTP Public Key Pinning 和 Certificate Pinning 的主要目标之一是防止 MITM 攻击。

因此,如果您可以在不禁用的情况下破坏它,那么您将证明这些技术是错误的。