12

JVM 允许使用代理属性 http.proxyHost 和 http.proxyPort 来指定 HTTP 代理服务器,并允许使用 https.proxyHost 和 https.proxyPort 来指定 HTTPS 代理服务器。

我想知道与 HTTP 代理服务器相比,使用 HTTPS 代理服务器是否有任何优势?

通过 HTTPS 代理访问 https url 是否比通过 HTTP 代理访问更方便?

4

3 回答 3

47

HTTP 代理收到一个纯文本请求,并且 [在大多数但不是所有情况下] 向远程服务器发送不同的 HTTP 请求,然后将信息返回给客户端。

HTTPS 代理是一个中继器,它接收特殊的 HTTP 请求(CONNECT 动词)并建立一个到目标服务器(甚至不一定是 HTTPS 服务器)的不透明隧道。然后客户端向服务器发送 SSL/TLS 请求,他们继续进行 SSL 握手,然后使用 HTTPS(如果请求)。

如您所见,这是两种完全不同的代理类型,具有不同的行为和不同的设计目标。HTTPS 代理无法缓存任何内容,因为它看不到发送到服务器的请求。使用 HTTPS 代理,您有一个通往服务器的通道,客户端接收并验证服务器的证书(反之亦然)。另一方面,HTTP 代理可以查看并控制它从客户端收到的请求。

虽然可以通过 HTTP 代理发送 HTTPS 请求,但这几乎永远不会完成,因为在这种情况下,代理将验证服务器的证书,但客户端将能够接收和验证仅代理的证书,并且代理证书中的名称将不匹配套接字连接的地址,在大多数情况下会发出警报并且 SSL 握手不会成功(我不会详细说明如何尝试解决这个问题)。

最后,由于 HTTP 代理可以查看请求,这使 HTTPS 通道提供的安全性概念无效,因此对 HTTPS 请求使用 HTTP 代理通常仅用于调试目的(再次,我们省略了需要监控的偏执的公司安全策略的情况)公司员工的所有 HTTPS 流量)。

另外:还在这里阅读我对类似主题的回答。

于 2012-05-04T04:35:02.727 回答
10

没有优点或缺点。并且没有“HTTPS 代理”服务器。

您可以告诉协议处理程序将哪个代理服务器用于不同的协议。这可以为httphttpsftp完成socks。不多也不少。

我无法告诉您是否应该为 https 连接使用不同的代理。这取决于。我只能解释对代理的 http 和 https 请求的区别。

由于HTTP 代理(或 Web 代理)可以理解HTTP(因此得名),因此客户端可以将请求发送到代理服务器而不是实际的目标。这不适用于HTTPS. 这是因为代理无法进行最初发生的 TLS 握手。因此客户端必须向代理发送CONNECT请求。代理建立 TCP 连接,只是在不接触它们的情况下来回发送包。因此 TLS 握手发生在客户端和目标之间。HTTP 代理服务器看不到所有内容,也不会验证目标服务器证书。

这整个 http、https、代理可能会有些混乱。可以使用 https 连接HTTP 代理。在这种情况下,客户端和代理之间的通信是加密的。

还有所谓TLS terminatinginterception代理服务器,例如Squid 的 SSL Peek and Spliceburp,它们可以查看所有内容。但这不应该开箱即用,因为代理使用自己的证书,这些证书不是由受信任的 CA 签名的。

参考

于 2017-11-24T13:42:35.620 回答
5

如果您的意思是通过HTTPS 代理通过 TLS 连接到 HTTP 代理服务器,那么

我想知道与 HTTP 代理服务器相比,使用 HTTPS 代理服务器是否有任何优势?

优点是您的客户端与代理服务器的连接是加密的。例如,防火墙无法看到您使用CONNECT方法连接到的主机。

通过 HTTPS 代理访问 https url 是否比通过 HTTP 代理访问更方便?

除了使用 HTTPS 代理,浏览器到代理服务器的连接是加密的之外,一切都相同。

但是你需要在你的代理服务器上部署一个证书,就像 https 网站一样,并使用一个pac文件来配置浏览器以启用通过 SSL 连接到代理

有关更多详细信息和实际示例,请在此处查看我的问题和答案HTTPS 代理服务器仅适用于 SwitchOmega

于 2019-07-12T03:37:18.730 回答