python - 尝试使用 websocket-client 建立 https 连接时出现 SSL 错误

标签 python ssl websocket

我正在尝试用 python 编写一个 websocket 程序来监听服务器消息并打印它们。由于我是 websockets 的新手,我尝试使用 websocket-client 上给出的代码开始github页面。特别是 javascript 之类的 API。但是,我收到此错误:

[Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我想使用 https,但我不希望 ssl 验证失败时标记错误。我试图寻找可以在程序中指定它的方法,但我找不到这方面的任何文献。请帮忙!

class websocketIO:
    def __init__(self, protocol, host, port):
        self.ws = None
        self.openCallback = None
        self.protocol = "ws"
        if protocol == "https:":
            self.protocol = "wss"
        self.host = host
        self.port = port
        self.messages = {}


    def open(self, callback):
        print self.protocol + "://" + self.host + ":" + self.port
        self.ws = websocket.WebSocketApp(self.protocol + "://" + self.host + ":" + self.port, on_message = self.on_message, on_error = self.on_error, on_close = self.on_close)
        self.openCallback = callback
        self.ws.on_open = self.on_open;
        self.ws.run_forever()

    def on_open(self, ws):
        threading.start_new_thread(self.openCallback, ())

    def on_message(self, ws, message):
        if isinstance(message, str):
            msg = json.loads(message)
            if msg['func'] in self.messages:
                self.messages[msg['func']](msg['data'])
            else:
                print "Error: message is not a binary string"

    def run(self, *args):
        self.ws.on_open = args[0]

    def on(self, name, callback):
        self.messages[name] = callback

    def emit(self, name, data):
        message = {'func': name, 'data': data}
        self.ws.send(json.dumps(message))

def main():
    global wsio
    wsio = websocketIO("https:", "localhost", "9090")
    wsio.on('setupDisplayConfiguration', setupDisplayConfiguration)
    wsio.on('initialize', initialize)
    wsio.open(on_open)

def on_open():
    global wsio
    wsio.emit('Message1', {'Test': "Data"});
    print "Message Sent"

def setupDisplayConfiguration(data):
    print (data['host'] + ":" + str(data['port']))

def initialize(data):
    print (data['address'])

main()

最佳答案

您通过 SSL 与您的客户端连接到本地主机。我怀疑您是否在本地主机上使用了一个证书,该证书可以根据您信任的 CA 进行验证,并且还与本地主机的主机名相匹配。你检查了吗?

关于python - 尝试使用 websocket-client 建立 https 连接时出现 SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23900539/

相关文章:

Python 请求库 SSL 错误 : [Errno 2] No such file or directory

java - 如何修复 java play 框架中自签名 TLS 证书的 'unknown_certificate' 错误

java - Websocket 阻塞,不会因客户端拔出/断电而超时

python - 为什么 Pandas series.str.contains 方法在有前导空格时检测不到匹配项?

python - 如何使用 python 在 OpenCv 中查找轮廓的颜色

Python (Tkinter) - 从列表框创建复选框列表

ssl - javax.net.ssl 警告 "user_canceled"是什么意思?

node.js - 推送到 vercel 后无法连接到 websocket 服务器

java - 为什么 SimpUserRegistry 在 EC2 实例上无法正常工作

python - 如何找到所有可能的方法将字符串划分为 n 个切片而无需递归?