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

JMeter调用HTTPS客户端Jar方法报SunCertPathBuilderException异常

JMeter正常请求参考

问题描述

  • 使用JMeter原生Sampler发起HTTPS接口请求时,访问完全正常
  • 在JSR223 PreProcessor(使用Groovy作为脚本语言)中,导入外部Jar包调用内部Java方法向同一个HTTPS地址发起请求时,抛出sun.security.provider.certpath.SunCertPathBuilderException异常
  • 报错对应的publish model方法基于Java Rest Assured框架开发,请求目标地址和正常访问的Sampler完全一致

Groovy脚本报错截图

问题根因

JMeter原生HTTP Sampler默认使用JMeter内置的SSL上下文与证书信任存储,不会直接依赖JDK的默认证书配置。但JSR223脚本中调用的Rest Assured客户端是独立实现,不会自动继承JMeter的SSL规则,默认走JDK原生的证书链校验逻辑:当目标HTTPS服务使用自签名证书、私有CA签发证书,或者证书链不完整,对应根证书没有存入运行JMeter的JDK信任库时,就会触发证书路径构建失败的报错。

解决方法

根据你的使用场景选对应方案即可:

  • 方案1:将目标服务根证书导入JDK信任库(生产/测试通用,符合安全规范)
    先导出目标HTTPS服务的根CA证书,执行keytool命令将证书导入JDK的cacerts信任库:
    keytool -import -alias target-service-cert -file 你的根证书文件路径.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
    
    命令执行完成后重启JMeter,Rest Assured发起请求时就能正常校验证书链。
  • 方案2:Rest Assured配置跳过证书校验(仅本地测试环境使用)
    如果是测试环境不需要严格校验证书,在调用Jar包方法前先给Rest Assured配置宽松HTTPS校验规则:
    import io.restassured.RestAssured
    import io.restassured.config.SSLConfig
    
    // 配置跳过HTTPS证书链校验
    RestAssured.config = RestAssured.config()
        .sslConfig(SSLConfig.sslConfig().relaxedHTTPSValidation())
    
    // 配置完成后再调用Jar包内的publish model方法即可正常发起请求
    
  • 方案3:注入JMeter的SSL上下文给Rest Assured
    如果需要和JMeter Sampler保持完全一致的SSL配置逻辑,可以在Groovy脚本中获取JMeter当前加载的SSLContext,直接设置给Rest Assured使用,不需要重复维护证书配置。

注意:方案2的跳过证书校验配置会关闭HTTPS证书安全校验,存在中间人攻击风险,绝对不能在生产环境、公网测试场景下使用。


内容的提问来源于stack exchange,提问作者Mani Maran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 05:12:16