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