使用 Squid 反向代理的多个 SSL 证书

使用 Squid 反向代理的多个 SSL 证书

我一直在将我的网络从使用 apache 反向代理(不够强大)升级为仅为反向使用而配置的 Squid 代理。

我的 squid 代理在 CentOS 6 VM 上,当前与我预先存在的 apache 代理一起运行 - 因此我仍然在端口 3128 上运行 squid。

我的 /etc/squid/squid.conf 中有此设置,

http_port 3128 accel vhost
visible_hostname squid

cache_peer 192.168.0.13 parent 80 0 no-query originserver name=server1
cache_peer_domain server1 www.server1.com server1.com

cache_peer 192.168.0.14 parent 80 0 no-query originserver name=server2
cache_peer_domain server2 www.server2.com server2.com

cache_peer 192.168.0.15 parent 80 0 no-query originserver name=server3
cache_peer_domain server3 www.server3.com server3.com

http_access allow all

这对于所有 HTTP 连接都有效。

它指导

www.server1.com:3128

192.168.0.13:80

我一直在尝试为三个域中的两个实施 SSL 证书。昨晚我成功配置了其中一个域的 HTTPS 连接,使其完全正常工作。

我在 HTTP 设置之前添加了此配置:

https_port 443 accel ssl-bump transparent vhost cert=/usr/ssl/CA/server1.crt key=/usr/ssl/CA/server1.key

cache_peer 192.168.0.12 parent 443 0 no-query originserver login=PASS ssl sslflags=DONT_VERIFY_PEER name=server1_ssl
cache_peer_domain server1_ssl ssl www.server1.com server1.com

昨晚这似乎没问题。它会连接到

https:// www.domain1.com

完全加密。由于其中一个选项(反复试验 - 不记得是哪个),它会解密数据包,并将 HTTPS 请求定向到正确的 VM。VM 已经安装了 SSL 证书,因此可以识别 HTTPS 请求,并且整个页面加载从开始到结束都是加密的。

我可以访问 https:// www.domain2.com,它会说连接已部分加密,并会显示证书错误,证书是针对 www.domain1.com 的

然而,今天,这确实干扰了与域 1 的 HTTP 连接,并且我的浏览器说页面正在以永远无法完成的方式重定向。

我已经从配置文件中删除了整个 SSL 连接配置,并且只运行标准 HTTP。

有什么方法可以让 https:// www.domain1.com 读取证书 domain1.crt 并直接进入 domain1 的 VM,以及让 https:// www.domain2.com 读取证书 domain2.crt 并直接进入 domain2 的 VM?

抱歉问了这么长的问题,但这是我遇到的一个非常具体的问题,我试图提供尽可能多的信息。

谢谢

答案1

Squid 不支持信噪比写的是什么这里. 因此在 Squid 中:

https://server1.com (cert for server1.com) => http://mylanip1
https://server2.com (cert for server2.com) => http://mylanip2

你必须:

  1. 将地址放在不同的 IP 上,因为证书被分配给唯一的对 [IP,端口]。
  2. 像这样配置 Squid:
https_port server1.com:443 cert=/etc/ssl/server1.pem vhost
https_port server2.com:443 cert=/etc/ssl/server2.pem vhost

cache_peer mylanip1 parent 80 0 name=lanip1 no-query originserver
cache_peer_domain lanip1 server1.com

cache_peer mylanip2 parent 80 0 name=lanip2 no-query originserver
cache_peer_domain lanip2 server2.com

如果您的服务器位于拥有通配符证书的域的子域上(例如 s1.myserver.com、s2.myserver.com、*.myserver.com 的证书),那么效果会更好。然后,您只能使用一个 https_port 条目

https_port 443 cert=/etc/ssl/wildcard.myserver.com.pem vhost

因此鱿鱼有可能发生这种情况。

但这种简单的情况用 httpd 和基于名称的虚拟主机。您将节省一个公共 IP。在 Centos 6 中,openssl 和 httpd 版本支持 SNI。从 openssl 版本可见。(参见这里这里

相关内容