文档中心
JMeter浼氬拷鐣TTPS璇佷功鍚楋紵娣卞叆瑙f瀽鎬ц兘娴嬭瘯涓殑SSL楠岃瘉鏈哄埗
时间 : 2025-09-27 16:20:52浏览量 : 2
什么是HTTPS证书验证?

在开始讨论JMeter是否忽略HTTPS证书之前,我们先要明白HTTPS证书验证是什么。简单来说,就像你去银行办理业务时要出示身份证一样,HTTPS证书是网站的"身份证"。当你的浏览器访问一个HTTPS网站时,会检查这个"身份证"是否真实有效。
举个例子:你访问https://www.bank.com时,浏览器会做三件事:
1. 检查证书是否由受信任的机构颁发(就像检查身份证是不是公安局发的)
2. 检查证书是否过期(就像检查身份证有没有过期)
3. 检查网站域名和证书上的域名是否匹配(就像检查身份证上的照片是不是你本人)
JMeter默认如何处理HTTPS证书?
JMeter默认情况下不会忽略HTTPS证书。它和浏览器一样,会对服务器的SSL/TLS证书进行完整验证。如果遇到以下情况,JMeter会拒绝连接并报错:
1. 自签名证书(没有权威机构认证的"自制身份证")
2. 过期证书("过期的身份证")
3. 域名不匹配的证书("拿着别人的身份证来办事")
4. 不受信任的CA颁发的证书("不认识的机构发的证件")
例如:你测试的环境使用了一个内部开发用的自签名证书test.company.local。用JMeter直接访问时会看到这样的错误:
```
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
这就像是保安说:"我不认识你这个证件颁发机构,不能让你进去。"
如何让JMeter忽略HTTPS证书验证?
虽然不建议在生产环境这样做,但在某些测试场景下(如内部测试、开发环境),我们可能需要让JMeter忽略SSL验证。有几种方法可以实现:
方法1:修改HTTP请求默认值
1. 右键点击测试计划 → 添加 → 配置元件 → HTTP请求默认值
2. 在"协议"字段输入`https`
3. 添加一个HTTP请求采样器
4. 在HTTP请求采样器中勾选`从HTML文件获取所有内含的资源`
5. (关键步骤)添加一个HTTP头管理器,添加以下名称和值:
- Name: `User-Agent`
- Value: `Mozilla/5.0`
这相当于告诉服务器:"我是个普通浏览器",有些服务器会对非浏览器的客户端进行更严格的验证。
方法2:使用JMeter属性跳过验证
更直接的方法是在测试计划中设置系统属性:
1. 打开JMeter安装目录下的`bin/jmeter.properties`文件
2. 找到并取消注释这两行:
```
https.use.cached.ssl.context=true
https.sessioncontext.shared=true
3. 或者在启动JMeter时通过命令行参数:
jmeter -Jhttps.use.cached.ssl.context=true -Jhttps.sessioncontext.shared=true
这类似于告诉JMeter:"别那么严格地检查每个人的证件了。"
方法3:使用BeanShell预处理程序
对于高级用户,可以添加一个BeanShell预处理程序来禁用SSL验证:
```java
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.HttpClient;
import org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl;
// Trust all certificates (不安全!)
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new javax.net.ssl.HostnameVerifier(){
public boolean verify(String hostname,
javax.net.ssl.SSLSession sslSession) {
return true;
}
}
);
// Create a trust manager that does not validate certificate chains
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
sc.init(null, new javax.net.ssl.X509TrustManager[] {
new javax.net.ss.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 null; }
}, new java.security.SecureRandom());
javax.net.ss.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
这段代码相当于完全关闭了安全检查系统,"谁来都放行"。注意:这种方法极其不安全,只应在完全可控的测试环境中使用。
JMeter忽略HTTPS证书的安全风险
虽然上述方法能解决问题,但必须了解其风险:
1.中间人攻击风险:黑客可以在你和服务器之间插入自己的设备窃取数据。比如你在咖啡店用公共WiFi测试银行应用时。
2.数据篡改风险:响应内容可能在传输过程中被修改而不被发现。想象一下你正在测试一个下载软件更新的功能——攻击者可以把恶意软件伪装成更新包。
3.隐藏配置问题:生产环境的有效证书可能在测试环境中被忽视的问题掩盖。这就好比考试前不做练习直接看答案——真正考试时会出大问题。
HTTPS性能测试的最佳实践
如何在保证安全的前提下进行有效的性能测试?以下是专业建议:
方案1:为测试环境配置有效证书
* 使用Let's Encrypt免费证书:
```bash
sudo certbot --apache -d test.yourdomain.com
* 企业内部分配私有CA:
让IT部门为你们的测试服务器颁发受内部信任的正式证书。
方案2:将测试服务器证书导入JMeter信任库
安全地处理自签名/内部CA的方法:
```bash
keytool -import -alias server-cert -keystore /path/to/jmeter/bin/cacerts -file server.crt
这相当于把内部ID卡登记到门禁系统中,"现在认识你了可以放行"
方案3:区分环境配置
在非生产环境使用忽略选项时:
if (!props.get("env").equals("prod")) {
System.setProperty("jsse.enableSNIExtension", "false");
// ...其他非生产环境专用设置...
}
这样就能确保生产环境的严格安全性不会被意外降低。
JMeter与其他工具的对比
|工具/框架|默认行为|修改方式|适用场景|
|||||
|JMeter|严格验证|需显式配置|需要精确控制的安全测试|
|Postman|较宽松|界面选项方便切换|快速API调试|
|cURL|可灵活控制|-k参数跳过验证|命令行快速测试|
|Selenium WebDriver|同浏览器行为|需复杂配置变更|UI自动化测试|
HTTPS协议版本的影响
不同TLS版本也会影响JMeter的行为:
- TLSv1.x: JMeter默认支持但可能有兼容性问题
- TLSv1.x: JMeter默认支持但可能有兼容性问题
- TLSv1.x: JMETER DEFAULT SUPPORT BUT MAY HAVE COMPATIBILITY ISSUES
- TLSv1.x: JMETER DEFAULT SUPPORT BUT MAY HAVE COMPATIBILITY ISSUES
可以通过修改`server.rmi_ssl_protocol`属性指定协议版本。
Java安全策略的影响
因为JMETER基于Java运行,JVM的安全策略也会影响SSL行为:
```properties
JAVA_HOME/jre/lib/security/java.policy中可能需要添加:
grant {
permission java.security.AllPermission;
};
特别是在企业受限环境中运行时可能需要此类调整。
SSL/TLS握手过程详解
理解完整的握手过程有助于调试问题:
Client Hello -->
<-- Server Hello + Certificate + Server Key Exchange + Certificate Request + Server Hello Done
Certificate -->
Client Key Exchange-->
Certificate Verify -->
[Change Cipher Spec]
Finished -->
<-- [Change Cipher Spec] + Finished
Application Data <--> Application Data
当这个过程中的任何一步失败都会导致连接中断,JMETER会抛出相应异常.
JVM版本差异带来的影响
不同Java版本对SSL的支持程度不同:
- Java7: TLSv1/TLSv1_0 only
- Java8: Up to TLSv1_2 (default)
- Java11+: Supports TLSv1_3
可以通过以下命令查看支持的协议列表:
java -Djdk.tls.client.protocols=TLSv_ _version_ _ -jar ApacheJmeter.jar --version | grep "Supported protocols"
HTTPS性能优化技巧
即使解决了认证问题,HTTPS的性能开销也不容忽视:
Tip01 Session Resumption复用会话
在user.properties中启用:
https.use.cached._ _ ssl._ _ context=_ _ true_
Tip02 OCSP Stapling优化
确保服务端启用OCSP装订以减少客户端验证时间.
Tip03 HTTP/2优先
现代服务器应优先支持HTTP/2以提升加密连接效率.
来说,JMETER不会自动忽略HTTPS证照,这是出于安全考虑的正确设计。在实际工作中,我们应根据不同场景选择适当的解决方案——从最安全的正式证照到谨慎使用的临时绕过方案,每种方法都有其适用场合。记住一条黄金法则:生产环境的任何性能测试都应保持完整的安全校验,这样才能真实反映用户体验并保障数据安全。
TAG:jmeter会忽略https证书么,jmeter same user on each,jmeter请求报错,jmeter ws,jmeter支持的协议,jmeter authorization