Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过ssl/tls的python paho mqtt客户端连接出现错误_Python_Ssl_Mqtt_Paho - Fatal编程技术网

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

通过ssl/tls的python paho mqtt客户端连接出现错误,python,ssl,mqtt,paho,Python,Ssl,Mqtt,Paho,我正在尝试使用我自己的证书颁发机构通过tls将我的python paho mqtt客户机连接到我的代理。我生成了必要的文件,并将我的RabbitMQ代理配置为使用它们。我的想法是,客户端对服务器进行身份验证,但客户端本身不需要进行身份验证 ca.cert.pem 证书 键。pem 我知道这些应该可以正常工作,因为我还有一个scala paho mqtt客户机可以正常工作 目前,我正在mac电脑上直接从终端运行该文件。我使用的是由python 3.5.2创建的VirtualEnv,我有一个文件

我正在尝试使用我自己的证书颁发机构通过tls将我的python paho mqtt客户机连接到我的代理。我生成了必要的文件,并将我的RabbitMQ代理配置为使用它们。我的想法是,客户端对服务器进行身份验证,但客户端本身不需要进行身份验证

  • ca.cert.pem
  • 证书
  • 键。pem
我知道这些应该可以正常工作,因为我还有一个scala paho mqtt客户机可以正常工作

目前,我正在mac电脑上直接从终端运行该文件。我使用的是由python 3.5.2创建的VirtualEnv,我有一个文件
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_版本
更改为
TLSv1_1
TLSv1
,并将其完全删除
ca.cert.pem
subscribe.py
文件位于同一文件夹中


泛美卫生组织网站上的例子似乎很简单,那么我在这里遗漏了什么呢?为什么我在python客户端上收到错误?

您尝试过MOSQUITO客户端吗?你遇到的问题有很多可能性,所以最好的解决方法是尝试另一种方法

mosquitto_sub-h地址-p8883--cafile ca.cert.pem-t“#”-d-v

d标志表示调试消息,v标志表示详细模式

如果MOSQUITO客户端无法与ca连接,您可以尝试:

mosquitto#u sub-h地址-p8883-cafile ca.cert.pem-t“#”-d-v-不安全

不安全标志将忽略服务器的CA检查。如果添加不安全标志可以使您连接,那么CA可能是错误的。然后可以使用openssl对其进行调试