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

Docker化C# M2Mqtt客户端TLS握手失败求助

排查与解决Docker环境下MQTT TLS握手失败问题

一、优先修正端口连接错误

从客户端错误日志可见:

System.Net.Sockets.SocketException (111): Connection refused 172.22.0.2:10003

这说明客户端错误连接到了10003端口(你的mls_server端口),而非MQTT Broker监听的8883端口,需做以下检查:

  • 确认客户端代码中BrokerAddress对应的端口为8883
  • 客户端环境变量BROKER_IP_ADDRESS需直接指向Docker网络内的Mosquitto服务名mosquitto,无需使用IP

二、补全Mosquitto TLS配置

你的mosquitto.conf开启了require_certificate=true,但未指定用于验证客户端证书的CA根证书,导致TLS握手失败。修改配置文件:

# TLS配置补充CA证书
certfile /mosquitto/certs/server.crt
keyfile /mosquitto/certs/server.key
# 添加CA根证书路径,用于验证客户端证书
cafile /mosquitto/certs/root-ca.cer

确保root-ca.cer已挂载到Mosquitto容器的/mosquitto/certs/目录下。

三、调整容器内证书权限

Docker挂载的证书文件权限可能过于严格,Mosquitto进程(默认运行用户UID为1883)无法读取,执行以下命令修正:

# 修改宿主机证书目录权限
chmod -R 755 ./mosquitto/certs
# 调整文件所有者匹配容器内进程
chown -R 1883:1883 ./mosquitto/certs

四、验证客户端证书有效性

  1. 确认客户端使用的PFX证书包含完整证书链(客户端证书+CA根证书)且私钥可用
  2. 检查Docker客户端容器的证书挂载路径:客户端代码中Constants.PATH_CLIENT_CERT和Constants.PATH_CA_CERT需与docker-compose.yml中挂载的./mls-client/keys:/mls-client/keys路径匹配,例如宿主机证书路径为./mls-client/keys/client.pfx,则代码中路径应为/mls-client/keys/client.pfx

五、开启Mosquitto Debug日志定位细节

修改mosquitto.conf开启Debug日志:

log_type debug

重启Mosquitto容器后,查看详细日志定位具体握手失败原因:

docker logs mosquitto

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:02:03