JMeter忽略SSL证书的设置方法及使用场景解析
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
美国云虚拟主机 助力出海企业低成本上云 WAF网站防火墙 为您的业务网站保驾护航
在进行接口测试或性能测试时,Apache JMeter 是一个非常强大且广受欢迎的开源工具,在实际测试过程中,我们常常会遇到 HTTPS 请求中 SSL 证书验证失败的问题,测试环境中可能使用的是自签名证书,或者证书已经过期等情况,在这种情况下,JMeter 默认会拒绝连接,从而导致请求失败。
为了解决这一问题,我们可以对 JMeter 进行配置,使其忽略 SSL 证书验证,从而顺利完成测试任务,本文将详细介绍这一问题的成因及解决方案。
SSL 证书验证失败的原因
SSL 证书的主要作用是确保通信的安全性以及验证服务器身份的真实性,在生产环境中,这种验证是必须的,以防止中间人攻击等安全威胁,在测试环境中,尤其是开发和测试阶段,服务器通常使用的是自签名证书,或者是未被主流信任机构(CA)签发的证书。
在这种情况下,当 JMeter 发起 HTTPS 请求时,可能会抛出如下异常:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed...
这表明 JMeter 无法验证服务器的 SSL 证书,从而导致请求失败。
JMeter 忽略 SSL 证书验证的方法
修改启动脚本(Windows/Linux/Mac)
要让 JMeter 忽略 SSL 证书验证,可以通过修改其启动时的 Java 参数来实现,具体操作如下:
- 进入 JMeter 安装目录下的
bin
文件夹; - 根据操作系统编辑对应的启动脚本:
- Windows 系统:编辑
jmeter.bat
; - Linux/Mac 系统:编辑
jmeter.sh
;
- Windows 系统:编辑
- 在启动参数中添加以下 JVM 参数:
-Djavax.net.ssl.trustStoreType=Windows-ROOT -Djavax.net.ssl.trustStore= -Dsun.security.ssl.allowLegacyHelloMessages=true -Dhttps.use.global.trustmanager=true -Dssl.enable=false
最关键的两个参数是:
-Dhttps.use.global.trustmanager=true
表示使用一个全局的 TrustManager 来处理 SSL 信任;-Dssl.enable=false
明确禁用 SSL 证书验证。
⚠️ 注意:这些设置将影响 JMeter 中所有 HTTPS 请求的 SSL 验证行为。建议仅在测试环境中使用,切勿在生产环境中开启此类配置,以免引入安全隐患。
使用 JSR223 脚本动态忽略证书验证
除了修改启动参数,还可以通过编写脚本的方式,在测试执行时动态忽略 SSL 证书验证,推荐使用 JSR223 Sampler 并选择 Groovy 语言来实现,代码如下:
import javax.net.ssl.* HttpURLConnection.setDefaultSSLSocketFactory(new CustomSSLSocketFactory()) class CustomSSLSocketFactory extends SSLSocketFactory { private SSLContext sslContext = SSLContext.getInstance("TLS") public CustomSSLSocketFactory() throws Exception { sslContext.init(null, new TrustManager[]{new X509TrustManager() { public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {} public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {} public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }}, new java.security.SecureRandom()) } public String[] getDefaultCipherSuites() { return null; } public String[] getSupportedCipherSuites() { return null; } public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException { return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose) } public Socket createSocket() throws IOException { return sslContext.getSocketFactory().createSocket() } }
将上述代码粘贴到 JSR223 Sampler 的 Groovy 脚本区域即可生效,这种方式可以按需启用,适用于需要在某些特定测试中临时忽略 SSL 验证的情况。
适用场景与安全建议
忽略 SSL 证书验证通常适用于以下几种测试场景:
- 测试使用自签名证书的服务;
- 内部系统接口的功能性测试;
- 演示环境或临时测试环境;
- 无法获取合法证书的过渡性解决方案。
但在生产环境中,绝对不能使用这种方式,否则,将极大增加中间人攻击等安全风险,严重威胁通信数据的安全性。
安全建议:
- 仅在本地测试环境中启用 SSL 忽略功能;
- 不要将此类配置提交到版本控制系统中;
- 在正式上线或对外服务时,务必使用合法的 SSL 证书,并启用完整的 SSL 验证机制。
JMeter 作为一款功能强大的性能测试工具,在面对 HTTPS 请求时,有时需要根据实际测试需求灵活配置 SSL 证书验证机制,忽略 SSL 证书虽然能够快速绕过证书问题,提高测试效率,但不应作为长期解决方案。
理解其原理与适用场景,才能在保障测试效率的同时,确保系统的整体安全性。
通过本文的介绍,相信你已经掌握了在 JMeter 中忽略 SSL 证书的常用方法,希望这些知识能够帮助你在日常测试工作中更加得心应手,提升测试效率与质量。
如需进一步扩展内容(例如自动化脚本、CI/CD 集成中如何配置等),也欢迎继续交流!