ssl新闻资讯

文档中心

JMeter浼氬拷鐣TTPS璇佷功鍚楋紵娣卞叆瑙f瀽鎬ц兘娴嬭瘯涓殑SSL楠岃瘉鏈哄埗

时间 : 2025-09-27 16:20:52浏览量 : 2

什么是HTTPS证书验证?

2JMeter浼氬拷鐣TTPS璇佷功鍚楋紵娣卞叆瑙f瀽鎬ц兘娴嬭瘯涓殑SSL楠岃瘉鏈哄埗

在开始讨论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的性能开销也不容忽视:

Tip

01 Session Resumption复用会话

在user.properties中启用:

https.use.cached._ _ ssl._ _ context=_ _ true_

Tip

02 OCSP Stapling优化

确保服务端启用OCSP装订以减少客户端验证时间.

Tip

03 HTTP/2优先

现代服务器应优先支持HTTP/2以提升加密连接效率.

来说,JMETER不会自动忽略HTTPS证照,这是出于安全考虑的正确设计。在实际工作中,我们应根据不同场景选择适当的解决方案——从最安全的正式证照到谨慎使用的临时绕过方案,每种方法都有其适用场合。记住一条黄金法则:生产环境的任何性能测试都应保持完整的安全校验,这样才能真实反映用户体验并保障数据安全。

TAG:jmeter会忽略https证书么,jmeter same user on each,jmeter请求报错,jmeter ws,jmeter支持的协议,jmeter authorization