SSL:尝试连接到 python3.7 中的 websocket 时出现 CERTIFICATE_VERIFY_FAILED

Posted

技术标签:

【中文标题】SSL:尝试连接到 python3.7 中的 websocket 时出现 CERTIFICATE_VERIFY_FAILED【英文标题】:SSL: CERTIFICATE_VERIFY_FAILED while trying to connect to a websocket in python3.7 【发布时间】:2021-04-26 08:06:47 【问题描述】:

这是我要运行的内容

        ws = websocket.WebSocketApp('wss://open.rocket.chat/sockjs/websocket',
                                header=["User-Agent: MyProgram", "x-custom: header"],
                                on_open=on_open,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close,
                                on_ping=on_ping
                                )
        ws.run_forever()

当我运行代码时,我从 on_error 函数中得到这个错误:

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1091)

我在 macOS 上运行代码,python3.7

要求包括:

websocket==0.2.1
websocket-client==0.58.0

我之前尝试的解决方案是添加上面的标题,它在 Windows 和 linux 环境中工作,但在 macOS 中不工作。

我尝试的另一件事是像这样关闭 ssl 验证export PYTHONHTTPSVERIFY=0 ,这也不起作用。

您能否解释一下这个错误背后的原因,为什么不一致? 有时有效,有时无效! 我想了解能够永久解决它的原因。 有什么建议吗?

【问题讨论】:

很多 Python 包都使用 certifi 包中包含的根 CA 证书。不确定这是否也适用于 websocket/websocket-client。但我建议首先使用 pip 更新 certifi 包。 @Robert 我的要求中实际上有最新版本 certifi==2020.12.5 我尝试并重新安装了它,但没有成功。 【参考方案1】:

我找到了 MacOS 的答案。

您只需导航到Applications/Python 3.x

然后运行这个文件Install Certificates.command

【讨论】:

以上是关于SSL:尝试连接到 python3.7 中的 websocket 时出现 CERTIFICATE_VERIFY_FAILED的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.7 在 MAC 上连接到 HSQLDB

C中的OpenSSL-例程:ssl3_get_record:尝试使用TLS1_2连接到服务器时版本号错误

R RPostgreSQL 使用 SSL 连接到远程 Postgres 数据库

如何在 Go 中使用 .crt 文件通过 ssl 连接到 mongoDB

通过 SSL 连接到 ZNC

Java 邮件无法使用 tls 或 ssl 连接到 smtp