使用代理时,有没有办法指定连接方法?我使用下面的代码发送一个HTTP CONNECT。我的负载均衡器不支持这一点。GET请求将终止代理和网站之间的TLS连接。CONNECT方法在最终用户和网站之间创建一个端到端的TLS连接。本质上,我需要检查代理的流量。
HttpHost proxy = new HttpHost(proxyHost, proxyPort);
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder
.setConnectionManager(connectionManager)
.setProxy(proxy)
.setDefaultRequestConfig(config);
下面是连接的样子:
Hypertext Transfer Protocol
CONNECT xyz.com:443 HTTP/1.1rn
Host: xyz.comrn
User-Agent: Apache-HttpClient/4.5.13 (Java/19.0.1)rn
rn
对于通过代理的HTTPS通信,客户端将使用CONNECT请求通过代理创建到远程受信任站点的连接。
使用HTTPS,客户端将只与它信任的服务器通信。信任通常要求服务器提供一个X.509证书,该证书由受信任的授权机构签名(非自签名(,未过期,并且具有与客户端尝试访问的站点匹配的主题。
当与代理通信时,代理通常无法匹配该标准。然而,有些代理可以通过动态生成一个新证书来匹配上述标准,该证书具有与客户端期望的主题相匹配的主题。
在这种情况下,一旦客户端与代理建立了TLS连接,代理就可以解密HTTPS流量的有效负载。
为了让代理创建客户端信任的证书,它必须由客户端信任的CA(证书颁发机构(签名。现在,默认情况下,客户端将不信任证书,因为它不会识别CA。但是,您可以通过在客户端上放置CA的证书来修改客户端。一旦客户端信任CA,它就会信任代理生成的所有证书。
话虽如此,以下是HTTPS代理的配置(由Cisco编写(,它提供了以下说明:
https://www.cisco.com/c/en/us/support/docs/unified-communications/jabber/212044-Configure-Charles-Proxy-to-Capture-HTTPS.html
Apache需要的配置操作(如果Apache支持这一点(将是类似的——您需要从Apache代理获得证书才能安装到您的客户端上。
我目前正在网上搜索类似的代理。我主要是在寻找一个关键词来描述这种技术,即使用与请求匹配的动态生成的证书,使HTTPS代理能够进行中间人攻击。如果我找到条款,我会更新帖子。
编辑:squid 的更新
我发现了一篇关于配置squid以检查HTTPS流量的文章:https://scubarda.com/2020/03/23/configure-squid-proxy-for-ssl-tls-inspection-https-interception/
在文章中,作者指出,您必须在浏览器(客户端(的证书/授权部分安装X.509 Cyber Saiyan证书(但这只是针对此特定配置(。
现在要搜索的一些好关键词是HTTPS检查。。。
如果这是一个临时调试解决方案,您可以使用专门为此设计的中间人(MITM(代理之一:
- 打嗝
- 查尔斯
- Zap
一旦安装在某个地方,您只需要将代理CA证书导入到进行连接的服务器中(以上每个代理都有一个操作指南(,并将代理地址设置为MITM。