Не удалось подтвердить сертификат SSL при подключении к Python mqtt - PullRequest
0 голосов
/ 15 марта 2019

У меня очень странная проблема. Предположение состоит в том, что я довольно невежественен как в mqtt, так и в python (последний я не использую сейчас, по крайней мере, 5-6 лет), но я делаю приложение Unity для музея, использующего систему 3D-слежения (www. pozyx.io) и мне нужно, чтобы на каждом из моих компьютеров был запущен небольшой клиент mqtt-to-OSC, чтобы мое приложение Unity могло считывать данные о положении с клиента.

На моей машине для разработки все работает как чудо, используя слегка модифицированную версию скрипта, предоставленную производителем сенсора.

`

API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

import paho.mqtt.client as mqtt
import ssl
import json

from pythonosc.udp_client import SimpleUDPClient


host = "mqtt.cloud.pozyxlabs.com"
port = 443
topic = "5c500595601a3f5871a17685"
username = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

ip = "127.0.0.1"                   # IP for the OSC UDP
network_port = 8888                # network port for the OSC UDP
osc_udp_client = SimpleUDPClient(ip, network_port)


def on_connect(client, userdata, flags, rc):
    print(mqtt.connack_string(rc))


def on_message(client, userdata, msg):

tag_data = json.loads(msg.payload.decode())

for tag in tag_data:
    try:
        network_id = tag["tagId"]
        #print(network_id)
        timestamp = tag["timestamp"]
        position = tag["data"]["coordinates"]
        yaw = tag["data"]["orientation"]["yaw"]

        osc_udp_client.send_message("/position", [network_id, timestamp, position["x"], position["y"], position["z"], yaw])
    except:
        print("Received a bad packet?")
        pass


def on_subscribe(client, userdata, mid, granted_qos):
    print("Subscribed to topic!")


client = mqtt.Client(transport="websockets")

client.username_pw_set(username, password=password)

client.tls_set_context(context=ssl.create_default_context())

client.on_connect = on_connect

client.on_message = on_message
client.on_subscribe = on_subscribe

client.connect(host, port=port)
client.subscribe(topic)

client.loop_forever()

`

Теперь, когда я нахожусь в музее для развертывания, конечно же, на только что настроенных машинах Windows 10 (я пробовал и на NUC, и на Lenovo Thinkpad), ничего не работает, и я получаю каждый раз следующую ошибку

C: \ Users \ Vattenkikare1 \ Desktop \ osc_hans> py osc_hans.py Traceback (последний вызов был последним): Файл "osc_hans.py", строка 67, в client.connect (хост, порт = порт) Файл "C: \ Users \ Vattenkikare1 \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ paho \ mqtt \ client.py", строка 839, в соединении вернуть self.reconnect () Файл "C: \ Users \ Vattenkikare1 \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ paho \ mqtt \ client.py", строка 994, в переподключении sock.do_handshake () Файл "C: \ Users \ Vattenkikare1 \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ ssl.py", строка 1117, в do_handshake self._sslobj.do_handshake () ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] проверка сертификата не удалась: не удалось получить сертификат локального эмитента (_ssl.c: 1056)

Мой ноутбук подключен к тому же WiFi, и у меня есть права администратора на всех машинах. Не могли бы вы понять, что может быть причиной проблемы? И почему это может произойти только на других компьютерах, а не на моем? Сначала я развернул exe на этих машинах, но затем на одной из них я сделал быструю настройку python со всеми модулями, но ничего не изменилось.

Я нашел несколько похожих проблем, но ни один из них не мог быть связан непосредственно с моим в плане решения.

1 Ответ

0 голосов
/ 15 марта 2019

Кажется, я нашел решение самым случайным образом.Я заметил в посте, что веб-сайт Pozyx.io использует сертификат «COMODO RSA Domain Validation Secure Server CA», и, хотя в документации API его нет, я установил его на тестовых компьютерах и все начало работать.

...