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