SSL证书验证在python mqtt连接上失败

时间:2019-03-15 06:26:11

标签: python ssl certificate ssl-certificate mqtt

我遇到一个非常奇怪的问题。前提是我对mqtt和python都一无所知(后者至少从5-6年起就不再使用了),但是我正在使用3D跟踪系统(www.python.org)为博物馆制作Unity应用。 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 追溯(最近一次通话): 在第67行的文件“ osc_hans.py”中 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() do_handshake中的文件“ C:\ Users \ Vattenkikare1 \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ ssl.py”,行1117 self._sslobj.do_handshake() ssl.SSLCertVerificationError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败:无法获取本地发行者证书(_ssl.c:1056)

我的笔记本电脑已插入同一WiFi,并且我对所有计算机都具有管理员权限。您对导致问题的原因有任何想法吗?那为什么只能在其他计算机上而不在我的计算机上发生这种情况呢? 我确实首先在这些计算机上部署了一个exe,但是随后在其中一台计算机上,我对所有模块进行了快速python设置,但是没有任何改变。

我确实发现了一些类似的问题,但是就解决方案而言,我没有一个直接与我有关。

1 个答案:

答案 0 :(得分:0)

我似乎以最随机的方式找到了解决方案。我在帖子中注意到Pozyx.io网站使用了“ COMODO RSA域验证安全服务器CA”证书,即使API文档中未提及该证书,我也将其安装在测试计算机上,并且全部开始工作。 >