python paho mqtt客户端连接通过ssl/tls给出错误
Posted
技术标签:
【中文标题】python paho mqtt客户端连接通过ssl/tls给出错误【英文标题】:python paho mqtt client connection through ssl/tls giving an error 【发布时间】:2016-08-23 13:41:11 【问题描述】:我正在尝试使用我自己的证书颁发机构通过 tls 将我的 python paho mqtt 客户端连接到我的代理。我生成了必要的文件并配置了我的 RabbitMQ 代理以使用它们。我的想法是客户端对服务器进行身份验证,但客户端本身不需要进行身份验证。
ca.cert.pem cert.pem key.pem我知道这些应该可以正常工作,因为我还有一个可以正常工作的 scala paho mqtt 客户端。
目前我直接从我的 Mac 上的终端运行该文件。我正在使用由 python 3.5.2 创建的 virtuanenv,并且我有一个文件 subscribe.py
import paho.mqtt.client as paho
import ssl
def on_message(clnt, userdata, msg):
print(msg.topic+" "+str(msg.payload))
def on_connect(client, userdata, rc):
print("Connected with result code "+str(rc))
mqttc.subscribe("foo")
mqttc = paho.Client()
mqttc.on_message = on_message
mqttc.on_message = on_message
mqttc.tls_set("ca.cert.pem", tls_version=ssl.PROTOCOL_TLSv1_2)
mqttc.connect("address", 8883, 60)
mqttc.loop_forever()
当我运行该文件时,我收到以下错误
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)
我还尝试将tls_version
更改为TLSv1_1
、TLSv1
并将其完全排除在外。 ca.cert.pem
与 subscribe.py
文件位于同一文件夹中
paho 网站上的示例看起来很简单,所以我在这里缺少什么?为什么我的 python 客户端收到错误消息?
【问题讨论】:
【参考方案1】:您尝试过 mosquitto 客户端吗?您遇到的问题有很多可能性,因此最好的解决方法是尝试另一种方法。
mosquitto_sub -h address -p 8883 --cafile ca.cert.pem -t "#" -d -v
d 标志用于调试消息,v 标志用于详细模式。
如果mosquitto客户端无法连接ca,可以试试:
mosquitto_sub -h address -p 8883 --cafile ca.cert.pem -t "#" -d -v --insecure
不安全标志将忽略 CA 检查服务器。如果添加不安全标志可以使您连接,那么可能是 CA 错误。然后你可以使用openssl来调试它。
【讨论】:
以上是关于python paho mqtt客户端连接通过ssl/tls给出错误的主要内容,如果未能解决你的问题,请参考以下文章
在 paho mqtt(客户端证书)中进行连接时,ee 密钥太小
org.eclipse.paho.client mqtt客户端连接超时