openssl - OpenSSL 安装后 Python 3 SSL 失败
问题描述
每当我在安装 openssl 后尝试运行我的 discord.py discord 机器人时,我都会收到这个巨大的错误,据我所知,它的要点是它找不到 Discord 的证书。我用 Bash 和 C++ 进行了测试,它们连接良好,但是我无法通过 python 连接到任何服务器。我已经重新安装了 Certifi 和 CA 证书,以及安装 PyOpenSSL 并手动添加签名密钥。可能是什么问题,我该如何解决?
Traceback (most recent call last):
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 969, in _wrap_create_connection
return await self._loop.create_connection(*args, **kwargs) # type: ignore # noqa
File "/usr/lib/python3.8/asyncio/base_events.py", line 1050, in create_connection
transport, protocol = await self._create_connection_transport(
File "/usr/lib/python3.8/asyncio/base_events.py", line 1080, in _create_connection_transport
await waiter
File "/usr/lib/python3.8/asyncio/sslproto.py", line 529, in data_received
ssldata, appdata = self._sslpipe.feed_ssldata(data)
File "/usr/lib/python3.8/asyncio/sslproto.py", line 189, in feed_ssldata
self._sslobj.do_handshake()
File "/usr/lib/python3.8/ssl.py", line 944, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "./betterbot.py", line 285, in <module>
valkyriebot.run(TOKEN)
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/discord/client.py", line 718, in run
return future.result()
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/discord/client.py", line 697, in runner
await self.start(*args, **kwargs)
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/discord/client.py", line 660, in start
await self.login(*args, bot=bot)
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/discord/client.py", line 509, in login
await self.http.static_login(token.strip(), bot=bot)
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/discord/http.py", line 293, in static_login
data = await self.request(Route('GET', '/users/@me'))
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/discord/http.py", line 185, in request
async with self.__session.request(method, url, **kwargs) as r:
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/aiohttp/client.py", line 1117, in __aenter__
self._resp = await self._coro
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/aiohttp/client.py", line 520, in _request
conn = await self._connector.connect(
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 535, in connect
proto = await self._create_connection(req, traces, timeout)
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 892, in _create_connection
_, proto = await self._create_direct_connection(req, traces, timeout)
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 1051, in _create_direct_connection
raise last_exc
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 1020, in _create_direct_connection
transp, proto = await self._wrap_create_connection(
File "/home/valkyrie_pilot/.local/lib/python3.8/site-packages/aiohttp/connector.py", line 971, in _wrap_create_connection
raise ClientConnectorCertificateError(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host discord.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)')]```
解决方案
这个问题可能是因为你有一个新的 VPS。
我发现最好的解决方法是运行
pip install certifi
(确保您使用正确版本的 Python 进行 pip,有时可能是 pip3)
然后当你完成后运行:
sudo update-ca-certificates
如果您想知道certifi是什么,它是一个预先安装了请求的软件包,所以如果您有一个新的 VPS,它就没有安装。它是一次性软件包,因此在安装完成后,您应该永远拥有必要的证书。如果你想自己检查它是什么,这里是GitHub 存储库certifi
和PyPi 项目certifi
祝你有美好的一天,快乐的编码^^
推荐阅读
- arrays - 数组中的映射内的映射,数组内的映射
- tensorflow - 如何从 Jupyter notebook 访问 tensorflow?
- javascript - 如何避免在反应中保存错误的输入数据?
- javascript - Gojs 将元素插入画布
- c++ - 调用 Main 替换矢量对象并覆盖数据
- java - 如何使用 Thymeleaf 获取对象
- arrays - 将 OFFSET 与列数组一起使用,然后使用 SUMPRODUCT
- javascript - 如何检测完成淡出动画并调用函数?
- python-3.x - 在树莓派 4 中运行推理几秒钟后,openvino 崩溃
- kotlin - Kotlin 如何识别“使用”函数中的 lambda 接收器