目录

1️⃣ 证书准备

2️⃣ 使用 OpenSSL 生成 .p12 证书

3️⃣ 启动 JMeter 并加载证书

假设情况:

4️⃣ 配置 MQTT Connect Sampler

MQTT Connect 配置如下:

5️⃣ 发布测试消息

6️⃣ 常见问题排查

❌ 报错:502 Failed to establish Connection null

✅ 总结

💡Tips:


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 中设置

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐