为了账号安全,请及时绑定邮箱和手机立即绑定

在 python 3.7 中使用 paho mqtt 客户端的问题

在 python 3.7 中使用 paho mqtt 客户端的问题

慕标琳琳 2021-07-08 14:01:33
我正在运行以下代码以连接到 mqtt 服务器。import paho.mqtt.client as mqttimport sslimport uuidclient = mqtt.Client(str(uuid.uuid1()))client.tls_set(    "ca.crt",    "client.crt",    "client.key",    cert_reqs=ssl.CERT_REQUIRED,    tls_version=ssl.PROTOCOL_TLSv1)client.connect(    "127.0.0.1",    8883,)client.loop_forever()此代码适用于 python2.7 版本。但是当我使用 python3.7 版本运行它时,我收到以下错误。Traceback (most recent call last):  File "test.py", line 29, in <module>    8883,  File "virtualenvs/mqtt-xG2h6zri/lib/python3.7/site-packages/paho/mqtt/client.py", line 839, in connect    return self.reconnect()  File "mqtt-xG2h6zri/lib/python3.7/site-packages/paho/mqtt/client.py", line 994, in reconnect    sock.do_handshake()  File ".pyenv/versions/3.7.0/lib/python3.7/ssl.py", line 1108, in do_handshake    self._sslobj.do_handshake()ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: IP address mismatch, certificate is not valid for '127.0.0.1'. (_ssl.c:1045)请帮我弄清楚如何在 python 3.7 中完成这项工作。
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

找到了答案。


实际上,根据此链接匹配服务器 IP 地址与证书的 CN 字段已被弃用超过 15 年。但是低于 3.7 的 python 版本仍然允许这样做,即使它已被弃用。因此,我必须创建一个证书,并在 SAN 字段中添加服务器的 IP 地址。


此答案中解释了使用 SAN 字段创建证书。但是答案中的解决方案使用域名。如果您使用 IP 地址创建证书,请使用此命令创建证书,而不是该答案中的命令。


openssl x509 -req -in server.csr \

        -extfile <(printf "subjectAltName=IP:127.0.0.1") \

        -CA ca.crt \

        -CAkey ca.key \

        -CAcreateserial -out server.crt \

        -days 365

使用这些证书后,错误就解决了。


查看完整回答
反对 回复 2021-07-21
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

我已经使用通用名称字段重新创建了服务器证书作为服务器机器(安装 mosquitto 代理的位置)的“主机名”而不是 IP 地址。
基本上是 xxxx主机名
但是,它适用于 Windows

此外,tls_insecure_set()如果有人使用 TLS 证书,则设置为 true 没有任何意义。


查看完整回答
反对 回复 2021-07-21
  • 3 回答
  • 0 关注
  • 460 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号