Пишу программу на Python для работы с MQTT-брокером.
Сначала подключаюсь по порту 1883 к брокеру broker.emqx.io:
mqtt_broker = "broker.emqx.io"
mqtt_broker_port = 1883
mqtt_client_id = f"ozna_ds_publisher_{random.randint(0, 1000000)}"
mqtt_keepalive = 5 * 60
client = mqtt_client.Client(mqtt_client_id)
client.connect(mqtt_broker, mqtt_broker_port, keepalive=mqtt_keepalive)
Всё работает нормально.
По просьбе заказчика пытаюсь переключиться с broker.emqx.io на mqtt.cloud.yandex.net с одновременным переходом на на порт 8883. Из справочных материалов Яндекса я не понял, какой именно сертификат мне нужно со своей стороны передать client.tls_set(), поэтому всё предсказуемо не работает.
Код примерно такой:
mqtt_broker = "mqtt.cloud.yandex.net"
mqtt_broker_port = 8883
mqtt_client_id = f"ozna_ds_publisher_{random.randint(0, 1000000)}"
mqtt_keepalive = 5 * 60
client = mqtt_client.Client(mqtt_client_id)
client.tls_set("C:/Works/mqtt-rest-bridge/cert.pem", tls_version=ssl.PROTOCOL_TLSv1_2)
client.tls_insecure_set(True)
client.connect(mqtt_broker, mqtt_broker_port, keepalive=mqtt_keepalive)
В строке client.connect вываливается исключение "[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:997)"
Буду благодарен за рабочий пример подключения к MQTT-брокеру Яндекса на Python или за разъяснение, какой именно сертификат (реестра, устройства или еще какой-то) надо передавать в client.tls_set()