OWASP ZAP无法拦截Java回归测试发起的SOAP API请求问题求助
问题原因
- 你使用的Apache HttpClient 4.x组件默认不会读取JVM系统级的HTTP/HTTPS代理配置,即便你通过
System.setProperty设置了代理参数,请求也会直接绕过代理访问目标服务,这就是代理不生效、ZAP无感知的核心原因。 - ZAP默认仅提供HTTP/HTTPS代理服务,未开启SOCKS代理支持,你配置SOCKS代理后向ZAP的HTTP代理端口发送SOCKS协议请求,自然会出现客户端连接报错、ZAP侧收到未知报文触发超时警告的问题。
- 现有
app.keystore仅存储了SOAP服务的可信证书,后续走ZAP代理时ZAP会动态替换SSL证书,若不将ZAP根证书导入信任库会出现SSL握手失败问题。
解决步骤
1. 替换代理配置方式,直接给Apache HttpClient配置ZAP代理
删除原有JVM系统代理、SOCKS代理相关的System.setProperty代码,在构造HttpClient实例时显式指定代理,示例代码如下:
import org.apache.http.HttpHost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.DefaultProxyRoutePlanner; // 构造ZAP代理对象 HttpHost zapProxy = new HttpHost("localhost", 8888); DefaultProxyRoutePlanner proxyRoutePlanner = new DefaultProxyRoutePlanner(zapProxy); // 生成绑定了代理配置的HttpClient实例 CloseableHttpClient httpClient = HttpClients.custom() .setRoutePlanner(proxyRoutePlanner) // 保留你原有HttpClient的其他配置(比如SSL相关配置)即可 .build();
2. 导入ZAP根证书到现有信任库
- 打开ZAP客户端,依次点击
工具 → 选项 → 动态SSL证书,选择保存根证书到本地,命名为zap_root_ca.cer。 - 执行keytool命令将ZAP根证书导入你现有的
app.keystore:
keytool -importcert -alias zap_root_ca -file C:\本地保存路径\zap_root_ca.cer -keystore C:/standalone/configuration/app.keystore -storepass somepassword
执行后输入yes确认导入即可。
3. 验证配置
保持ZAP启动状态,运行你的SOAP回归测试用例,查看ZAP的历史记录面板,如果能看到对应SOAP请求则说明代理配置成功。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

