Python Websocket 安全 [SSL: CERTIFICATE_VERIFY_FAILED] (_ssl.c:777)

Posted

技术标签:

【中文标题】Python Websocket 安全 [SSL: CERTIFICATE_VERIFY_FAILED] (_ssl.c:777)【英文标题】:Python Websocket secure [SSL: CERTIFICATE_VERIFY_FAILED] (_ssl.c:777) 【发布时间】:2018-02-12 05:31:34 【问题描述】:

我正在制作一个需要从 WebSocket 安全服务器接收实时消息的程序。

我尝试使用 javascript 完成这项任务,效果非常好! 但是 JavaScript 并不能满足我项目的需求。所以我试图在 Python 中做同样的事情。但没有成功。

我正在努力解决的错误是:

[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:777)

我认为 JavaScript 没有这个问题,因为它使用浏览器来验证连接。

我正在使用什么:

Python 3.6.4 Anaconda3 Windows 10

我真的不知道该怎么办。我已经搜索了很多。 我可以通过更改代码来解决这个问题吗? 我应该使用另一个库来建立连接吗? 是 Python 还是 Anaconda 的问题? 是我想不通的新手错误吗?

这是我的 Python 代码:

import websocket
import websocket
import threading
import time

def on_message(ws, message):
    print(message)

def on_error(ws, error):
    print(error)

def on_close(ws):
    print("### closed ###")

def on_open(ws):
    def run(*args):
        for i in range(3):
            time.sleep(1)
            data = ws.recv()
            print(data)
        time.sleep(1)
        ws.close()
        print("thread terminating...")
    thread.start_new_thread(run, ())



websocket.enableTrace(True)
ws = websocket.WebSocketApp("wss://stream.binance.com:9443/ws/bnbbtc@ticker",
                            on_message = on_message,
                            on_error = on_error,
                            on_close = on_close)
ws.on_open = on_open

ws.run_forever()

如果有人感兴趣,这是我的 JavaScript 代码:

var socket = new WebSocket('wss://hostname:port/dir/dir@ticker');

socket.onopen = function(event) 

    console.log('connected');



socket.onmessage = function(e)
   var server_message = e.data;
   console.log(server_message);

【问题讨论】:

【参考方案1】:

Anaconda 出错,尝试删除证书:conda remove certifi

如果不起作用,您可以从此问题获取更多信息:https://github.com/ContinuumIO/anaconda-issues/issues/494#issuecomment-155097614

或者您可以在 python 脚本中禁用 ssl 验证:

import ssl
ws.run_forever(sslopt="cert_reqs": ssl.CERT_NONE)

【讨论】:

成功了!谢谢!我仍然需要使用 SSL 做同样的事情。但这已经是一个很大的进步。至少现在我知道错误在哪里。谢谢! :) 嗨@WerexZenok你能想出办法吗?我现在陷入同样的​​问题,我需要与实际使用 SSL 但在 anaconda 中不需要相同的东西,只是 python 嗨@MayurJadhav。很抱歉之前没有回答。我停止了我的项目多年。我不记得我到底做了什么,但我认为我没有解决问题。我现在正在尝试为我的其他项目做类似的事情。我解决了 SSL 部分,如果您有兴趣但仍然卡住,我可以发一个新帖子来解释我是如何做到的。 嗨@WerexZenok 感谢您的回复,我还找到了解决 SSL 问题的方法,我正在使用此客户端:github.com/websocket-client/websocket-client 并设置此环境变量对我有帮助:WEBSOCKET_CLIENT_CA_BUNDLE

以上是关于Python Websocket 安全 [SSL: CERTIFICATE_VERIFY_FAILED] (_ssl.c:777)的主要内容,如果未能解决你的问题,请参考以下文章

使用正确的 SSL 证书连接不安全(Websockets)

使用 ClientWebSocket 实现与 Websocket 服务器的安全 (SSL) 连接

如何创建安全(TLS/SSL)Websocket 服务器

如何使用 TLS/SSL 确保 WebSocket 连接的安全

如何使用 TLS/SSL 确保 WebSocket 连接的安全

python websocket服务器与ssl