mosquitto可发SSL消息,Python Paho脚本遇证书验证失败原因咨询
Mosquitto可正常发送SSL消息,但Python Paho报CERTIFICATE_VERIFY_FAILED的原因及解决办法
为什么两者表现不同?
- Mosquitto客户端默认不验证服务器证书的主机名/IP匹配性,只要证书是可信CA签发的,哪怕证书里没包含你用来连接的公网IP作为SAN(主题备用名称),也能顺利连接。
- Python Paho依赖Python标准库的
ssl模块,默认会严格执行证书验证:当你用公网IP连接MQTT broker时,证书里必须把这个IP添加到SAN字段里,否则就会触发IP address mismatch验证失败错误。
无需修改服务器证书的临时解决方法
如果只是测试场景,不想折腾重新生成证书,可以在Python代码里关闭主机名验证逻辑:
在调用client.tls_set之后,添加一行代码:
client.tls_insecure_set(True)
注意:这个操作会跳过证书的主机名验证,降低连接的安全性,仅适合测试环境使用,生产环境不推荐。
生产环境的标准解决方案
要彻底解决问题,还是得生成包含公网IP的SAN证书。针对你用的tls-gen工具,可以这么改:
- 找到tls-gen的基础配置文件(比如
basic/openssl.cnf) - 在配置文件里添加SAN相关配置:
[req] req_extensions = v3_req [v3_req] subjectAltName = IP:<你的公网IP地址>
- 按照tls-gen的流程重新生成CA和服务器证书即可。
内容的提问来源于stack exchange,提问作者Igor L.
相关产品推荐
相关产品推荐

