Mosquitto 1.4.9 WSS连接失败问题技术求助
解决Mosquitto 1.4.9 WSS连接失败问题
我来帮你排查下这个WSS连接失败的问题,结合你给出的环境和日志信息,核心问题主要出在libuv编译缺失和WSS端口配置不全上,一步步来解决:
一、先解决libuv未编译的核心问题
Mosquitto 1.4.x版本的WebSockets(尤其是加密的WSS)依赖libuv库,如果编译时没启用这个选项,WSS的TLS握手功能会直接失效,这也是你启动日志提示“libuv支持未编译”的原因。
重新编译带libuv支持的Mosquitto
- 先安装libuv的开发依赖包(以Debian/Ubuntu为例,其他系统替换成对应包管理命令):
sudo apt-get install libuv1-dev - 重新编译Mosquitto 1.4.9,确保启用libuv和websockets支持:
编译时注意看输出,要确保出现# 下载源码(如果已经有可以跳过) wget http://mosquitto.org/files/source/mosquitto-1.4.9.tar.gz tar zxf mosquitto-1.4.9.tar.gz cd mosquitto-1.4.9 # 配置编译选项,一定要加--with-libuv和--with-websockets ./configure --with-libuv --with-websockets # 编译安装 make sudo make install sudo ldconfiglibuv support: yes,这才说明libuv被正确集成了。
二、修正Mosquitto配置,启用8083端口的WSS
你的8083目前只支持明文WS,需要给它加上TLS配置才能启用WSS。打开/etc/mosquitto/mosquitto.conf,补充以下配置(和8883用相同的证书即可):
# 保留你原有的1883、8883配置 listener 1883 listener 8883 cafile /path/to/your/ca.crt certfile /path/to/your/server.crt keyfile /path/to/your/server.key # 配置8083为WSS端口 listener 8083 protocol websockets # 绑定加密证书,和8883一致 cafile /path/to/your/ca.crt certfile /path/to/your/server.crt keyfile /path/to/your/server.key
如果需要同时保留明文WS和加密WSS,可以拆分两个端口,比如8083(WS)和8084(WSS),分别配置即可。
三、修正客户端连接方式
1. Web界面连接WSS
确保你用的连接地址是wss://home.fqdn.com:8083,同时要保证浏览器信任你的证书(可以手动添加证书例外,或者用CA签发的正规证书)。之前的“forbidding on uri sanitation”错误大多是因为WSS未启用,导致请求被拦截。
2. mosquitto_pub连接WSS
之前你用mosquitto_pub连8083提示TLS错误,是因为默认用MQTT协议连接WS端口,需要指定websockets协议和TLS参数:
mosquitto_pub --protocol websockets --host home.fqdn.com --port 8083 --topic test/topic --message "test content" --cafile /path/to/your/ca.crt
四、验证修复效果
重启Mosquitto服务:
sudo systemctl restart mosquitto # 或者手动启动看实时日志 mosquitto -c /etc/mosquitto/mosquitto.conf -v
确认启动日志里不再出现“libuv支持未编译”的提示,然后测试WSS连接:
- 用Web界面测试连接
- 用上述mosquitto_pub命令测试发布
- 检查日志是否还有
lws_read: Unhandled state 76这类错误,如果还有,检查证书文件的路径和权限(确保Mosquitto进程能读取证书)
最后提个建议:Mosquitto 1.4.9是2017年的老版本,WebSockets支持存在不少已知bug,建议升级到最新稳定版,不仅能解决这类问题,安全性也更高。
内容的提问来源于stack exchange,提问作者Havock
相关产品推荐
相关产品推荐

