我希望有人能帮助我。我有这个问题:
squid 作为 ssl 透明代理运行,目前它使用这两个 iptables 规则接收所有流量:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3130
到目前为止没有任何问题。一切都运行完美...但是当我添加任何简单的 acl 来阻止 ssl 网站时,我收到此浏览器的错误:ssl 连接错误(ERR_SSL_PROTOCOL_ERROR)此外,如果我尝试使用下面粘贴的 conf 中当前注释的行运行 squid,我会从客户端收到证书错误(域不匹配)。
http_port 3128 intercept https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/usr/local/squid/ssl_cert/proxy_matrix-test_com.crt key=/usr/local/squid/ssl_cert/squid.key acl broken_sites dstdomain .example.com ssl_bump none localhost ssl_bump none broken_sites
#ssl_bump server-first all ssl_bump none sslcrtd_program /usr/local/squid/libexec/ssl_crtd -s /usr/local/squid/var/lib/ssl_db
-M 4MB sslcrtd_children 5
(cert.crt 由公认的认证机构签名) 有什么想法吗?谢谢。
答案1
使用 Squid over SSL 时,您总是会收到证书错误。原因是 Squid 到目标网站和 Squid 到浏览器之间有单独的 SSL 连接。因此,当浏览器收到来自 Squid 的证书时,即使该证书已签名,域名也不匹配。
+-----------+ +-------+ +---------+
| gmail.com |<----Cert1---->| Squid |<----Cert2---->| Browser |
+-----------+ +-------+ +---------+
在某些情况下,有一种方法可以解决这个问题。您可以使用动态 SSL 证书生成,它为目标域(例如 gmail.com)生成证书,并使用您创建的自签名根 CA 对其进行签名。问题是,自签名根 CA 证书必须在通过代理访问互联网的每个浏览器/客户端上都受信任。它不需要由实际的证书颁发机构签名,事实上,它不能。如果在 Windows 环境中,您可能可以通过组策略管理器推送自签名根 CA。