python paho mqtt客户端连接通过ssl/tls给出错误

问题描述:

我想通过tls使用我自己的证书颁发机构将我的python paho mqtt客户端连接到我的代理。我生成了必要的文件,并配置了我的RabbitMQ代理来使用它们。我的想法是客户端认证服务器,但客户端本身不需要认证。python paho mqtt客户端连接通过ssl/tls给出错误

  • ca.cert.pem
  • cert.pem
  • key.pem

我知道这些应能正常工作,因为我也有一个阶泛美卫生组织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_versionTLSv1_1文件,TLSv1,并完全放弃。 ca.cert.pemsubscribe.py文件位于同一文件夹中

paho网站上的示例看起来很简单,所以我在这里错过了什么?为什么我在我的Python客户端上收到错误?

您是否尝试过蚊子客户?遇到的问题有很多可能性,所以最好的方法是尝试另一种方法。

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来调试它。