我有很多服务器可以访问各种外部 Web 服务,其中大多数使用 SSL,其中一些需要客户端证书。我想集中客户端证书的配置并将表示层与底层服务器分离。
虽然我可以使用 Squid 代理请求,但我无法从文档中看到如何告诉 Squid 选择特定于目标 Web 服务的客户端证书。这可能吗?
一种方法是在 Squid 代理之外维护一组 stunnel 实例,然后将客户端软件配置为使用带有 URL 重写器的 http 请求,以通过适当的 stunnel 实例路由请求,但是如果我得到 XML 响应引用,这将中断HTTPS DTD(除非我用完整的 MITM 重写内容)。
还有其他解决方案吗?
更新
将“https”重写为“http”的问题在于,它会使用 http URI 破坏任何其他资源 - 因为协议适配器会将这些资源转换回 https!
我遇到了这篇文章,它解决了将客户端证书添加到代理连接的问题——这可能是一个解决方案。但是确实需要将客户端配置为使用代理,在命名以及如何使其与拆分 DNS 一起工作方面也存在问题。诚然不是大问题,但它让我想到我在这里描述的是大多数 CDN 提供商使用的模式 - 因此我目前正在考虑使用 Apache Traffic Server 作为中间组件 - 这允许使用拆分 DNS,在客户端和源,以及用于与源服务器通信的客户端证书。
Squid-in-the-middle 使用可配置的 CA 证书对直接 CONNECT 和透明重定向的 SSL 流量进行解密和加密。
http://wiki.squid-cache.org/Features/SslPeekAndSplice
在进一步挖掘之后,我决定使用背靠背的英镑实例。我也考虑过使用 stunnel 或 haproxy,但 pound 处理 SSL 的东西,并且具有操作 http 标头的基本能力。