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

ser*_*gei 5 python ssl mqtt paho

我试图通过使用我自己的证书颁发机构将我的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()
Run Code Online (Sandbox Code Playgroud)

当我运行该文件时,我收到以下错误

ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)
Run Code Online (Sandbox Code Playgroud)

我也试图改变tls_versionTLSv1_1,TLSv1并留下它完全.ca.cert.pem在同一文件夹中的subscribe.py文件

paho网站上的例子看起来非常简单,所以我在这里缺少什么?为什么我在python客户端上收到错误?

楊立群*_*楊立群 3

您尝试过蚊子客户端吗?您遇到的问题有很多种可能性,因此解决该问题的最佳方法是尝试其他方法。

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