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

通过Java执行JMeter JMX脚本遇DB2 SSL连接异常求助

问题分析

异常核心为NoSuchAlgorithmException,说明建立SSL连接时JDK无法找到DB2服务器要求的加密算法,或SSL相关配置存在缺失/不兼容情况。结合你的环境(JDK 1.8.0_261、JMeter 5.1、DB2 SSL连接),可从以下方向排查解决:

解决方案

1. 确认JCE无限制权限策略配置

JDK 8u161及以上版本默认启用无限制加密策略,仍需验证配置:

  • 打开JDK安装目录下的jre/lib/security/java.security文件
  • 查找crypto.policy配置项,确保值为unlimited:
    crypto.policy=unlimited
    
  • 若未找到该配置,手动添加后重启Eclipse。

2. 匹配DB2 JDBC驱动版本与环境

你当前使用的DB2 JDBC驱动版本为3.68.61,需确保:

  • 驱动版本与DB2服务器版本兼容(建议使用对应服务器版本的驱动,或升级至最新稳定版)
  • 在Maven依赖中正确引入驱动,同时将驱动包放置到JMeter的lib目录下,避免运行时类找不到:
    <dependency>
        <groupId>com.ibm.db2</groupId>
        <artifactId>db2jcc4</artifactId>
        <version>11.5.7.0</version> <!-- 替换为兼容的版本 -->
    </dependency>
    

3. 修正JMeter JDBC连接的SSL参数

在JMX脚本的JDBC连接配置中,完善SSL相关URL参数:

  • 确保连接URL包含sslConnection=true,并指定兼容的SSL协议(如TLSv1.2,JDK 8默认支持):
    jdbc:db2://xxxxxx:50005/your_db_name:sslConnection=true;sslProtocol=TLSv1.2;
    
  • 若DB2服务器使用自定义证书,需追加信任库配置参数:
    jdbc:db2://xxxxxx:50005/your_db_name:sslConnection=true;sslProtocol=TLSv1.2;javax.net.ssl.trustStore=/path/to/your/truststore.jks;javax.net.ssl.trustStorePassword=your_truststore_password;
    

4. 在Java代码中注入SSL系统属性

由于通过Java代码启动JMeter,需在执行测试前设置SSL相关系统属性,确保JMeter进程能读取到信任库和加密配置:

// 设置信任库路径与密码
System.setProperty("javax.net.ssl.trustStore", "/absolute/path/to/truststore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "truststore_pass");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
// 指定SSL协议版本
System.setProperty("https.protocols", "TLSv1.2");
// 初始化JMeter配置
JMeterUtils.loadJMeterProperties("path/to/jmeter-install/bin/jmeter.properties");
JMeterUtils.setJMeterHome("path/to/jmeter-install");
JMeterUtils.initLocale();
// 设置结果输出为XML
JMeterUtils.setProperty("jmeter.save.saveservice.output_format", "xml");

5. 验证JDK支持的加密算法

编写简单程序检查JDK是否支持DB2服务器要求的加密算法:

import java.security.Security;
import java.util.Set;

public class SSLCipherChecker {
    public static void main(String[] args) {
        Set<String> supportedCiphers = Security.getAlgorithms("Cipher");
        supportedCiphers.forEach(System.out::println);
        // 对比DB2服务器日志中要求的算法,若未找到需升级JDK或补全加密扩展
    }
}

6. 确保JMeter非GUI运行的结果配置正确

在Java代码中添加ResultCollector并指定XML结果文件路径:

// 加载测试计划
HashTree testPlanTree = SaveService.loadTree(new File("your_test.jmx"));
// 添加结果收集器
Summariser summariser = new Summariser("summary");
ResultCollector resultCollector = new ResultCollector(summariser);
resultCollector.setFilename("test_result.xml");
// 将结果收集器添加到测试计划
testPlanTree.add(testPlanTree.getArray()[0], resultCollector);
// 运行测试
StandardJMeterEngine jmeterEngine = new StandardJMeterEngine();
jmeterEngine.configure(testPlanTree);
jmeterEngine.run();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:16:29