Aedes MQTT Broker TLS/SSL连接失败问题排查求助
解决Aedes MQTT Broker TLS/SSL握手失败问题
核心问题定位与修复
1. TLS服务器创建参数顺序错误
你的代码中tls.createServer的参数顺序完全颠倒,Node.js的tls.createServer第一个参数应为TLS配置选项,第二个才是连接处理回调。错误的参数顺序导致服务器未加载证书配置,直接引发握手失败。
修正后的代码片段:
// 将options放在第一个参数位置,正确传入TLS配置 const server = tls.createServer(options, aedes.handle);
2. 证书生成命令的配置文件不匹配
你创建的配置文件是ref.cfg,但执行openssl命令时指定的是req.cnf,这会导致openssl使用默认配置生成证书,缺少你定义的Subject Alternative Name(SAN)等关键扩展,引发客户端域名验证失败。
修正后的openssl命令:
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout cert.key -out cert.pem -config ref.cfg -sha256
3. 客户端需信任自签证书
自签证书不被系统默认信任,客户端需明确配置信任该证书:
- MQTTX配置:在连接设置的「SSL/TLS」选项中,开启「CA证书」并选择生成的
cert.pem文件;测试环境可临时关闭「证书验证」(不建议生产环境使用)。 - curl测试:添加
--cacert参数指定信任的证书:curl -v https://localhost:8883 --cacert cert.pem
验证修复流程
- 用修正后的命令重新生成证书
- 启动修改后的Aedes服务器
- 配置了信任证书的MQTTX客户端连接
mqtts://localhost:8883,即可正常建立TLS连接。
内容的提问来源于stack exchange,提问作者Mendes
相关产品推荐
相关产品推荐

