我有一个启用了TLS的笔记本电脑上的Debian Shell中运行的Mosquitto代理。我能够在同一台笔记本电脑上使用paho.mqtt.client和ssl从另一个运行Python3.7的Debian shell成功连接到它。但是,当我尝试从外部Debian实例(特别是Raspberry Pi 3B +)进行连接时,对“ connect”方法的调用将一直挂起,直到发生超时错误为止。
这是在我的笔记本电脑上的客户端外壳上起作用的内容:
import paho.mqtt.client as mqtt
import ssl
mqttc = mqtt.Client()
mqttc.tls_set("ca.crt", "client.crt", "client.key", cert_reqs=ssl.CERT_REQUIRED)
mqttc.connect("LPS", 8883)
当我在RPi3B +上尝试相同操作时,connect方法只是挂起。 “ LPS”是我的笔记本电脑的机器名称,该机器名称是根据本文档在生成密钥/证书时使用的:https://mosquitto.org/man/mosquitto-tls-7.html
这是我对connect方法的调用:
mqttc.connect("LPS", 8883)
在RPi3B +上,我具有相同的证书颁发机构证书(ca.crt)。我尝试使用相同的client.crt和client.key,但是最近我一直在尝试使用RPi3B +(相同的“公用名”:LPS)上的openssl生成的新client.crt和client.key。没什么。
根据一些建议,我尝试将第三条语句更改为以下内容的各种组合(包括尝试使用协议的mqtt.MQTTv31):
Client(client_id="", clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport="tcp")
没有区别。
我的RPi3B +通过WiFi网络和小型以太网交换机(链接本地连接)连接到笔记本电脑。我尝试用IP地址(“ 169.254.128.185”和“ 192.168.0.102”)替换connect方法调用中的“ LPS”。没什么。
我正在使用/ etc / mosquitto中的以下命令启动mosquitto:
mosquitto -c mosquitto.conf -v
以下是mosquitto.conf中的相关行:
port 8883
cafile /etc/mosquitto/ca_certificates/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
tls_version tlsv1
require_certificate true
我还尝试在mosquitto.conf中设置以下内容(只是将东西扔在墙上以查看可能会粘住什么):
bind_address LPS
protocol mqtt
没有区别。
我注意到,如果我在connect方法中为域/ IP地址键入一些垃圾,则会发生相同的事情:
mqttc.connect("iujhkjhk", 8883)
没有区别,即它挂起,直到最终产生超时错误。
我能做的一件事会产生不同的结果,如果我在域/ IP地址前面加上“ tcp://”。在这种情况下,我会立即收到错误消息:
socket.gaierror: [Errno -2] Name or service not known
我试图确保到处都安装有最新版本的mosquitto和paho.mqtt。
尝试从RPi3B +连接时我做错了什么。