我正在尝试使用我自己的证书颁发机构将我的python paho mqtt客户端连接到我的代理。我生成了必要的文件并配置了我的RabbitMQ代理来使用它们。我的想法是客户端验证服务器,但客户端本身不需要进行身份验证。
我知道这些应该可以正常工作,因为我还有一个正常工作的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客户端上收到错误?
答案 0 :(得分: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进行调试。