如何加密与 Squid 代理服务器的连接

如何加密与 Squid 代理服务器的连接

我已经设置了一个匿名 squid 代理服务器,它运行正常,但我还没有找到任何有关如何加密我和服务器本身之间的流量的方法。从哪里开始?

答案1

Squid 文档引用了这一点: http://wiki.squid-cache.org/Features/HTTPS#Encrypted_browser-Squid_connection

然而,问题可能不在于配置 Squid,而在于找到一个可以正常工作的浏览器……

Chrome 支持 HTTPS 代理连接,但只能通过自动配置 PAC 文件或命令行选项--proxy-server(请参阅http://dev.chromium.org/developers/design-documents/secure-web-proxy

Firefox仍在“努力”,请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=378637(7 年并且还在继续)。最终从版本 33 开始支持此功能,(感谢 Dan 的更新)。

运行本地(与浏览器在同一台机器上)stunnel作为代理包装器可以解决任何浏览器的这个问题,但可能不适合你的预期部署。这个有用的页面显示了如何创建这样的设置(也可以使用可选的 PAM 身份验证):

https://congcan.wordpress.com/2014/04/16/how-to-setup-a-secure-web-proxy-using-ssl-encryption-squid-caching-proxy-and-pam-authentication/

请注意,这stunnel与通过 CONNECT 通过 HTTP 代理建立隧道完全不同,后者是更常见的情况。从某种意义上说,您使用 SOCKS 通过 SSH 的解决方案大致相同,但您没有 HTTP 支持,它不受限制(认为 CONNECT 到任何端口),您没有缓存,并且身份验证不由浏览器处理。

如果您使用代理身份验证,并且想要保护任何凭据标头,则这(HTTPS 客户端代理连接)是一个不错的计划。否则,此设置可能并不能解决人们希望的所有问题,并且 HTTPS 连接会进行双重加密,这(至少)会进一步增加连接延迟。

  1. 你正在连接到 HTTP 站点:未加密的流量无论如何都会离开代理
  2. 你正在连接到 HTTPS 站点:除了 CONNECT 请求的目标(即网站主机名)之外,客户端代理中没有任何内容真正需要加密,但 TLS 客户端 hello 可能具有包含该名称的 SNI,而服务器 hello 几乎肯定会有服务器证书,两者都可以被拦截

另一个可以增加价值的情况是使用客户端证书进行代理身份验证(但浏览器也不支持这种方式),据报道,这在 Firefox 中是有效的(参见 bug209312)。

CERT 最近标记了此问题:漏洞说明 VU#905344 HTTP CONNECT 和 407 代理身份验证所需消息未受完整性保护由于假连接中间人攻击。

答案2

我在这里输入了现在用于为代理服务器设置 2048 位加密的确切命令:

ssh -C2qTnN -D 8080 user@remote-address

您的浏览器的代理设置(与 IE 设置弹出的窗口一样丑陋)必须指向127.0.0.1:8080SOCKS 字段,而其他所有字段都留空(通常谈论的是 SOCKS 代理)

显然,如果在远程服务器上打开,所有其他端口都可以工作。

相关内容