HTTPS 连接是否需要 HTTPS 代理,或者我可以使用 HTTP 代理吗?

Do HTTPS connections require HTTPS proxies or can I use HTTP proxies?

问题是关于 HTTP 与 HTTPS 的。

如果我想匿名加载一个强制使用 HTTPS 的网站,例如 Google.com,我需要 HTTPS 代理,还是可以不用 HTTP 代理?

如果您的代理是 SOCKS,它不会关心通过它连接的套接字类型。它有自己的握手过程,并且不关心握手之后会发生什么。 SOCKS 握手后是否启动 SSL 握手 (HTTPS) 是否不是 SOCKS 代理问题,它会直接通过。

另一方面,一些 HTTP 代理需要 HTTP headers 来引导它们,这样的 HTTP 代理将不允许 HTTPS,因为它需要读取 headers.

另一方面(ekhm...嗯,脚?),支持 HTTP CONNECT 的 HTTP 代理也可以设置任意数据的传输。因此,这样的代理可以设置任何类型的套接字,它可以进行 SSL 握手,然后可以用于 HTTPS 传输。

HTTP 代理服务器支持 CONNECT 动词,它支持 HTTP 代理内的 HTTPS 连接。您不需要特殊的 HTTPS 代理服务器或任何其他设置。

CONNECT 动词允许您创建到任何给定 IP:Port 地址的二进制套接字隧道。因此任何 HTTP 客户端(所有浏览器)都将打开安全隧道并通过代理服务器进行安全通信。但是,除非他们通过向您发送自签名证书实施中间人攻击,否则没有人无法控制或看到任何正在通过隧道的东西。

如今大多数防火墙自动实施部署在工作网络中的中间人自签名证书,因此您可能需要深入挖掘才能确定它是否真的安全。所以它可能不是那么匿名。

如果您尝试匿名访问服务,您将无法通过 运行 您自己的代理获得此服务。从最初的问题中不清楚 "proxy" 的含义,例如本地服务或远程服务。通过网络上的代理浏览不会获得匿名,除非它类似于通过 TOR 网络中继的 TOR 代理。

至于代理是否可以支持HTTPS,这里已经讲过了,不支持CONNECT的代理是很少见的。但是,如果您使用的是远程匿名服务,我怀疑他们会使用 MitM,因为您需要将签名证书安装到受信任的根存储中,所以他们无法偷偷摸摸地这样做。