У меня есть брокер Mosquitto, работающий в оболочке Debian на моем ноутбуке с включенным TLS. Я могу успешно подключиться к нему из другой оболочки Debian под управлением Python3.7, используя paho.mqtt.client и ssl на одном ноутбуке. Но когда я пытаюсь подключиться из внешнего экземпляра 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 +, метод подключения просто зависает. «LPS» - это имя компьютера моего ноутбука, которое я использовал при создании ключей / сертификатов в соответствии с этим документом: https://mosquitto.org/man/mosquitto-tls-7.html
Вот мой вызов метода подключения:
mqttc.connect("LPS", 8883)
На RPi3B + у меня есть тот же сертификат центра сертификации (ca.crt). Я пытался использовать один и тот же client.crt и client.key, но недавно я пытался использовать новые client.crt и client.key, сгенерированные с использованием openssl на RPi3B + (то же самое «Общее имя»: LPS). Без разницы.
Согласно нескольким предложениям, я попытался изменить третье утверждение на различные комбинации следующих (включая попытку mqtt.MQTTv31 для протокола):
Client(client_id="", clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport="tcp")
Без разницы.
Мой RPi3B + подключен к моему ноутбуку через мою сеть WiFi И через небольшой Ethernet-коммутатор (Link Local connection). Я попытался заменить «LPS» в вызове метода подключения на IP-адреса («169.254.128.185» и «192.168.0.102»). Без разницы.
Я запускаю mosquitto, используя следующую команду из / etc / 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
Без разницы.
Я заметил, что если я ввожу какую-то фигню для домена / IP-адреса в методе соединения, произойдет то же самое:
mqttc.connect("iujhkjhk", 8883)
Нет разницы, то есть он зависает до тех пор, пока не произойдет ошибка тайм-аута.
Одна вещь, которую я могу сделать, чтобы получить другой результат, - это если я префикс домена / IP-адреса с "tcp: //". В этом случае я сразу получаю сообщение об ошибке:
socket.gaierror: [Errno -2] Name or service not known
Я пытался убедиться, что у меня везде установлены последние версии mosquitto и paho.mqtt.
Что я делаю не так, пытаясь подключиться с RPi3B +.