CentOS7 上 Squid 的 CA 证书问题

CentOS7 上 Squid 的 CA 证书问题

我正在管理一个在 CentOS 7(Diladele 设备)上运行 Squid 3.5.10 的公司 Web 代理,进行 SSL 碰撞,在将新的 CA 证书添加到系统信任存储时遇到了一些问题,这导致我们的用户无法访问他们应该能够访问的几个受 SSL 保护的网站。其中一个网站是https://www.sexierdating.com/(是的,听起来就是这样,但我们的政策是,只要合法,我们就不会关心人们午休时间上网的内容)。

Squid 的错误消息是常见的X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY,这意味着由于某种原因,Squid 不信任或无法验证目标服务器证书。到目前为止,从 CA 的支持页面获取 PEM 格式的 CA 根证书,将其放入/etc/pki/ca-trust/source/anchors,运行update-ca-trust并重新启动 Squid 足以解决问题 - 但在我的当前情况下不行。ca-certificates 包是当前版本,因为我刚刚在机器上运行了整个 yum 更新。

我目前遇到问题的所有域名都带有“Go Daddy 安全证书颁发机构 - G2”证书。我从他们的支持页面下载了所有证书(https://certs.godaddy.com/repository/),按照上述方法安装它们,重新加载 squid,但错误仍然存​​在。我甚至用 strace 观察了 update-ca-trust,看看它是否真的拾取了正确的 PEM 文件 - 事实证明确实如此。

让我感到有点奇怪的是,certs.godaddy.com 下载页面似乎使用了与某些有问题的域完全相同的根证书和中间证书,但该页面通过 Squid 运行正常。当我在 Firefox 中比较证书时,我没有看到整体规格和算法有任何差异,但仍然有一个有效,其他的无效。

我已经束手无策了,希望有人能给我指明正确的方向来解决这个问题。我无法为每个使用 GoDaddy 证书的第二个页面添加代理例外。

答案1

机器和浏览器上的 CA 存储包括根 CA 证书。

网站绝不应该由根 CA 颁发证书,而应该由中介机构颁发。

网站有责任返回自己的证书和中间证书,因此浏览器可以将中间证书链接到它信任的根证书之一。

在您给出的网站示例中,它们未包含中间证书,因此您的用户无法信任该网站。这可以通过此处的 ssllabs 扫描看到:https://www.ssllabs.com/ssltest/analyze.html?d=www.sexierdating.com。如您所见,它只发送了一个证书而不是两个,因此会收到不完整警告。展开证书路径部分会显示完整链,并允许您下载此中介(如果您想安装它)。

需要注意的是,浏览器通常会处理这种情况 - 要么是因为它们会缓存访问其他网站时产生的通用中间证书,要么是因为它试图找到丢失的中间证书。因此,大多数用户和网站运营商通常不会发现这些错误配置。在这里猜测 SSL 碰撞对于处理这些错误来说并不是那么友好。

这与 certs.godaddycom 形成对比(https://www.ssllabs.com/ssltest/analyze.html?d=certs.godaddy.com) 发送的是完整的证书链。事实上,它存在相反的问题,发送了太多证书,因为没有必要发送根证书(但这可能是由于历史原因,因为您可以看到有两个证书链路径 - 其中一条路径要求根证书由另一个证书签名,这可能是由信任存储中没有新根证书的旧浏览器使用的)。

无论如何你的选择是:

  1. 告诉您的用户这是网站设置不正确,让他们回去工作,不要再浪费公司时间浏览不可靠的网站。
  2. 将中间证书添加到您的 Squid CA 根存储中。当然,这不是根 CA,实际上不应该在存储中,并且如果出于某种原因被撤销,您仍然会信任它(这是证书不从根证书颁发的原因之一,因为很难将它们从信任存储中删除)。因此,通过包含此证书,您会引入安全风险。
  3. 联系网站并向他们解释问题并要求他们修复。然后准备好解决用户想要解决的所有其他损坏网站的问题!

如果是我的话,我毫无疑问会选择选项 1 :-)

相关内容