You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SOAPUI可用的Java KeyStore在RestAssured中无法正常使用求助

问题描述

负责银行项目的SOAP Web服务测试,之前用SOAPUI结合Java KeyStore(JKS文件)完成SSL认证的手动测试完全正常,但改用RestAssured做SOAP测试时,无SSL认证的示例能正常运行,依赖JKS文件实现SSL直通的代码却跑不起来。因项目保密无法提供真实代码,仅附上模拟代码。

遇到的错误

  • I/O异常(java.net.SocketException):连接https://mybaseuri:1234失败,对方未及时响应或主机无响应
  • javax.net.ssl.SSLHandShakeException:PKIX路径构建失败,无法找到到目标的有效认证路径

尝试的代码

代码1

public void acctSumm(){
        String keyStr = "项目目录下密钥库文件的绝对路径";
        
        String payload = "SOAP XML请求体";
        
        Response response = RestAssured.given()
                .keyStore(keyStr, "passwrd")
                .baseUri("https://mybaseuri:1234")
                .basePath("/accountSummary")
                .header("SOAPAction", "AcctSummaryInq")
                .header("Content-Type", "text/xml;, charset=utf-8")
                .body(payload)
                .post();
                
    }

代码2

public void acctSumm(){
        String keyStr = "项目目录下密钥库文件的绝对路径";

        String payload = "SOAP XML请求体";
        RestAssured.baseURI = "https://mybaseuri:1234";
        Response response = given()
                .keyStore(keyStr, "passwrd")
                .header("Content-Type", "text/xml")
                .body(payload)
                .when()
                .post("AcctSummaryInq")
                .then()
                .statusCode(200)
                .and()
                .log().all().extract().response();

    }

解决方案

针对你遇到的两个错误,直接给出排查和修复方案:

一、解决PKIX路径构建失败(SSLHandShakeException)

这个问题核心是RestAssured未正确信任目标服务证书,或JKS配置有误:

  1. 验证JKS文件有效性
    用keytool -list -v -keystore 你的JKS路径命令检查:
    • JKS中是否包含目标服务的根/中间证书(单向SSL),或同时包含客户端证书+服务端信任证书(双向SSL)
    • 确保和SOAPUI使用的是同一个JKS文件,密码完全一致(注意大小写)
  2. 显式指定密钥库类型
    RestAssured的keyStore()默认用JKS,但部分场景需显式声明:
    .keyStore(keyStr, "passwrd", "JKS")
    
  3. 补充信任库配置
    如果是单向SSL,需同时指定信任库(若JKS包含信任证书):
    .trustStore(keyStr, "passwrd")
    
    若密钥库和信任库分开,单独指定信任库文件路径即可。

二、解决连接失败(SocketException)

大概率是请求路径或网络配置错误:

  1. 核对请求路径
    对比SOAPUI中的请求URL:
    • 代码1最终请求地址是https://mybaseuri:1234/accountSummary,代码2是https://mybaseuri:1234/AcctSummaryInq,必须和SOAPUI的请求地址完全匹配
  2. 修正Content-Type格式
    代码1中text/xml;, charset=utf-8多了一个分号,改成标准格式:
    .header("Content-Type", "text/xml; charset=utf-8")
    
  3. 排查网络连通性
    • 用telnet mybaseuri 1234测试端口是否开放,或ping mybaseuri确认主机可达
    • 内网环境需配置代理的话,在RestAssured中添加:
      .proxy("代理地址", 代理端口)
      

额外调试技巧

  • 开启全量日志查看请求细节:
    .log().all()
    
  • 添加JVM参数打印SSL握手日志,定位证书问题:
    -Djavax.net.debug=ssl,handshake
    

内容的提问来源于stack exchange,提问作者testemulate emulate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:43:25