JVM 允许使用代理属性 http.proxyHost 和 http.proxyPort 来指定 HTTP 代理服务器,并允许使用 https.proxyHost 和 https.proxyPort 来指定 HTTPS 代理服务器。
我想知道与 HTTP 代理服务器相比,使用 HTTPS 代理服务器是否有任何优势?
通过 HTTPS 代理访问 https url 是否比通过 HTTP 代理访问更方便?
HTTP 代理收到一个纯文本请求,并且 [在大多数但不是所有情况下] 向远程服务器发送不同的 HTTP 请求,然后将信息返回给客户端。
HTTPS 代理是一个中继器,它接收特殊的 HTTP 请求(CONNECT 动词)并建立一个到目标服务器(甚至不一定是 HTTPS 服务器)的不透明隧道。然后客户端向服务器发送 SSL/TLS 请求,他们继续进行 SSL 握手,然后使用 HTTPS(如果请求)。
如您所见,这是两种完全不同的代理类型,具有不同的行为和不同的设计目标。HTTPS 代理无法缓存任何内容,因为它看不到发送到服务器的请求。使用 HTTPS 代理,您有一个通往服务器的通道,客户端接收并验证服务器的证书(反之亦然)。另一方面,HTTP 代理可以查看并控制它从客户端收到的请求。
虽然可以通过 HTTP 代理发送 HTTPS 请求,但这几乎永远不会完成,因为在这种情况下,代理将验证服务器的证书,但客户端将能够接收和验证仅代理的证书,并且代理证书中的名称将不匹配套接字连接的地址,在大多数情况下会发出警报并且 SSL 握手不会成功(我不会详细说明如何尝试解决这个问题)。
最后,由于 HTTP 代理可以查看请求,这使 HTTPS 通道提供的安全性概念无效,因此对 HTTPS 请求使用 HTTP 代理通常仅用于调试目的(再次,我们省略了需要监控的偏执的公司安全策略的情况)公司员工的所有 HTTPS 流量)。
另外:还在这里阅读我对类似主题的回答。
没有优点或缺点。并且没有“HTTPS 代理”服务器。
您可以告诉协议处理程序将哪个代理服务器用于不同的协议。这可以为http
、https
和ftp
完成socks
。不多也不少。
我无法告诉您是否应该为 https 连接使用不同的代理。这取决于。我只能解释对代理的 http 和 https 请求的区别。
由于HTTP 代理(或 Web 代理)可以理解HTTP
(因此得名),因此客户端可以将请求发送到代理服务器而不是实际的目标。这不适用于HTTPS
. 这是因为代理无法进行最初发生的 TLS 握手。因此客户端必须向代理发送CONNECT
请求。代理建立 TCP 连接,只是在不接触它们的情况下来回发送包。因此 TLS 握手发生在客户端和目标之间。HTTP 代理服务器看不到所有内容,也不会验证目标服务器证书。
这整个 http、https、代理可能会有些混乱。可以使用 https 连接到HTTP 代理。在这种情况下,客户端和代理之间的通信是加密的。
还有所谓TLS terminating
的interception
代理服务器,例如Squid 的 SSL Peek and Splice或burp,它们可以查看所有内容。但这不应该开箱即用,因为代理使用自己的证书,这些证书不是由受信任的 CA 签名的。
如果您的意思是通过HTTPS 代理通过 TLS 连接到 HTTP 代理服务器,那么
我想知道与 HTTP 代理服务器相比,使用 HTTPS 代理服务器是否有任何优势?
优点是您的客户端与代理服务器的连接是加密的。例如,防火墙无法看到您使用CONNECT
方法连接到的主机。
通过 HTTPS 代理访问 https url 是否比通过 HTTP 代理访问更方便?
除了使用 HTTPS 代理,浏览器到代理服务器的连接是加密的之外,一切都相同。
但是你需要在你的代理服务器上部署一个证书,就像 https 网站一样,并使用一个pac
文件来配置浏览器以启用通过 SSL 连接到代理。
有关更多详细信息和实际示例,请在此处查看我的问题和答案HTTPS 代理服务器仅适用于 SwitchOmega