使用 JMeter 测试 MQTT CONNECT,配置 SSL(双向认证)全流程指南
通过以上步骤,我们成功使用 JMeter 测试了 MQTT over SSL 连接,并实现了双向认证发布消息。
目录
❌ 报错:502 Failed to establish Connection null
1️⃣ 证书准备
假设你已经从服务端(或自己生成)得到了以下五个文件:
文件名 | 说明 |
---|---|
ca.pem |
CA 根证书 |
ca.key |
CA 私钥(测试环境用) |
client.key |
客户端私钥(不要泄露) |
client.pem |
客户端证书(由 CA 签名) |
client.csr |
客户端证书请求(中间文件) |
2️⃣ 使用 OpenSSL 生成 .p12
证书
-
JMeter 只能识别 Java 标准的 keystore 格式(JKS 或 PKCS12),我们要将已有的 PEM 文件打包为
.p12
: -
在 Windows 中打开
CMD
,管理员模式,执行以下命令//1.首先进入证书文件存放的地址,假设我的存放地址是D:\cert cd D:\cert //2.使用openssl打包成jmeter可识别的.p12文件 openssl pkcs12 -export -in client.pem -inkey client.key -certfile ca.pem -out client.p12 -name "mqtt-client"
执行时会要求输入一个导出密码,建议设置为简单的
123456
。完成后,你会在D:\cert获得文件:
client.p12
3️⃣ 启动 JMeter 并加载证书
-
在 Windows 中打开
CMD
,管理员模式,执行以下命令:假设情况:
-
你的
.p12
文件叫做client.p12
-
位于目录:
D:\certs\client.p12
-
密码为:
123456
-
JMeter 已安装在:D
:\apache-jmeter-5.6.3\
//你的 .p12 文件叫做 client.p12,位于目录:D:\certs\client.p12 //密码为:123456 //JMeter 已安装在:D:\apache-jmeter-5.6.3\ cd /d D:\apache-jmeter-5.6.3\bin jmeter -Djavax.net.ssl.keyStore="D:\certs\client.p12" ^ -Djavax.net.ssl.keyStoreType=PKCS12 ^ -Djavax.net.ssl.keyStorePassword=123456 ^ -Djavax.net.ssl.trustStore="D:\certs\client.p12" ^ -Djavax.net.ssl.trustStoreType=PKCS12 ^ -Djavax.net.ssl.trustStorePassword=123456
4️⃣ 配置 MQTT Connect Sampler
打开 JMeter GUI 后,添加如下组件:
-
Thread Group
-
MQTT Connect
-
MQTT Publisher / Subscriber
-
View Results Tree
MQTT Connect 配置如下:
字段 | 值 |
---|---|
Server Name or IP | ****** |
Port Number | 8883 (SSL默认端口) |
Protocol | SSL (不是 TCP) |
Dual SSL authentication | ✅ 勾选 |
Client Certification(*,p12): | 生成的.p12位置,我的位于目录:D:\certs\client.p12 |
Secret | 123456 |
Username | ****** |
Password | ****** |
5️⃣ 发布测试消息
添加 MQTT Publisher
,配置如下:
字段 | 值 |
---|---|
Topic Name | /test/topic (示例) |
Message Type | Text |
Message | Hello MQTT via SSL |
QoS Level | 1 |
然后运行测试,观察 View Results Tree
,应显示绿色并返回 Message published successfully
。
6️⃣ 常见问题排查
❌ 报错:502 Failed to establish Connection null
原因可能为:
-
.p12
路径错误或未加载成功 -
MQTT Connect 配置未启用 SSL
-
.p12
密码设置不一致 -
防火墙/代理阻断了 8883 端口
-
服务端不接受连接(CA 不匹配、证书未生效)
建议查看 jmeter.log
,检查 SSLContext
是否初始化成功。
✅ 总结
通过以上步骤,我们成功使用 JMeter 测试了 MQTT over SSL 连接,并实现了双向认证发布消息。
💡Tips:
-
client.p12
包含了证书链、私钥、CA 证书,是 JMeter 最佳使用格式 -
Apifox、Postman 支持
.pfx
证书,.p12
改名即可使用 -
JMeter 启动参数必须放在命令行,而不是 GUI 中设置
更多推荐
所有评论(0)