使用paho配置TLS连接MQTT Broker失败,SSLV3握手报错如何解决
报错原因澄清
SSLV3_ALERT_HANDSHAKE_FAILURE属于TLS协议的历史遗留字段提示,不代表你实际使用了SSLv3协议,是所有TLS握手阶段失败的通用报错提示,你指定的TLSv1.2参数已经生效,无需怀疑该参数配置问题。
修复方案
- 先通过openssl工具做基线验证,排除证书、服务端配置问题
执行以下命令直接测试TLSv1.2连接是否正常:
如果命令执行仍报错,说明是CA证书不匹配、服务端未开启TLSv1.2支持、网络被拦截三类问题之一,优先核对你本地的openssl s_client -connect 18.221.19.47:8883 -tls1_2 -CAfile ca.crtca.crt是否为该MQTT Broker官方提供的根证书,有没有过期或内容被篡改。如果命令执行正常,说明底层TLS链路无问题,问题出在代码配置层面。 - 升级paho-mqtt库到最新稳定版
旧版本的paho-mqtt存在TLS参数不生效的已知bug,执行以下命令升级:pip install --upgrade paho-mqtt - 核对服务端TLS认证规则
如果你连接的是公司内部MQTT Broker,大部分企业会开启双向TLS认证,你当前代码中certfile和keyfile参数均为None,缺少客户端证书密钥配置,联系运维确认是否需要提供客户端证书,如果需要补充对应参数即可。 - 临时关闭证书校验做排除测试
可先修改cert_reqs参数为ssl.CERT_NONE测试是否能连接成功,如果可以连接则100%为证书校验问题,再回头核对CA证书即可,注意该配置仅可用于测试,不可在生产环境使用。 - 检查本地网络限制
确认本地防火墙、公司代理没有拦截8883端口的TCP请求,没有对TLS流量做中间人替换导致证书校验失败。
内容的提问来源于stack exchange,提问作者Codebro
相关产品推荐
相关产品推荐

