You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mosquitto建立TLS连接报错ssl3_get_record:wrong version number求助

  • 首先排查证书路径有效性问题:你当前mosquitto.conf中配置的证书路径是/mnt/d/开头的WSL/跨系统挂载路径,如果你直接将该配置放到路由器上使用,路由器本地不存在对应目录,mosquitto启动时会因加载证书失败,默认以非TLS模式监听8883端口。此时客户端发起TLS握手,服务端返回的是普通MQTT明文报文,OpenSSL解析失败就会抛出wrong version number错误。你需要将证书上传到路由器的可访问目录,修改mosquitto.conf中对应路径为路由器本地实际路径后重启mosquitto验证。
  • 验证服务端TLS配置是否正常:你可以在客户端设备上执行以下命令测试服务端8883端口的TLS握手是否正常:
    openssl s_client -connect 192.168.8.1:8883 -tls1_2
    
    如果命令返回证书信息和TLS 1.2握手成功的日志,说明服务端TLS配置正常,问题出在客户端;如果握手失败,说明服务端配置有误。
  • 检查客户端TLS版本配置是否生效:虽然你的代码中指定了ssl_opts.sslVersion = MQTT_SSL_VERSION_TLS_1_2,但需要确认底层MQTT库是否正确读取了该配置,没有被默认参数覆盖。你可以在客户端SSL初始化逻辑处加日志输出实际使用的TLS版本,或者抓包查看客户端发起的TLS Client Hello报文中携带的版本号,确认是TLS 1.2。
  • 确认mosquitto是否编译了TLS支持:部分路由器上裁剪版的mosquitto编译时没有开启TLS特性,就算配置了证书参数也不会生效。你可以在路由器上执行mosquitto -h,查看输出信息中是否包含SSL/TLS相关的说明,无相关内容则需要重新编译带TLS支持的mosquitto版本。
  • 校验证书有效性:确认CA证书、服务端证书、客户端证书的配对关系正确,证书未过期,且服务端证书的CN/SAN字段包含客户端连接使用的IP192.168.8.1。

内容的提问来源于stack exchange,提问作者Ashechol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:15:05