【问题标题】:SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108) Discord/pythonSSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1108) Discord/python
【发布时间】:2020-04-12 03:32:34
【问题描述】:

我正在使用 Pycharm 和 python 3.8 以及最新版本的不和谐。我试图运行这个脚本,但得到了这个错误。任何人都可以帮忙吗?

import discord

TOKEN = 'xxxxx'

client = discord.Client()

@client.event
async def on_message(message):
    # we do not want the bot to reply to itself
    if message.author == client.user:
        return

    if message.content.startswith('!hello'):
        msg = 'Hello {0.author.mention}'.format(message)
        await client.send_message(message.channel, msg)

@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')

client.run(TOKEN)

----- 下面错误-------

/Users/mellie/PycharmProjects/Dominations/venv/bin/python /Users/mellie/PycharmProjects/Dominations/Domi.py Traceback(大多数 最近通话最后):文件 “/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py”, 第 936 行,在 _wrap_create_connection return await self._loop.create_connection(*args, **kwargs) # type: ignore # noqa File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", 第 1042 行,在 create_connection 中 传输,协议=等待self._create_connection_transport(文件 "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", 第 1072 行,在 _create_connection_transport 中 等待服务员文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/sslproto.py”, 第 529 行,在 data_received 中 ssldata,appdata = self._sslpipe.feed_ssldata(数据)文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/sslproto.py”, 第 189 行,在 feed_ssldata 中 self._sslobj.do_handshake() 文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py”, 第 944 行,在 do_handshake 中 self._sslobj.do_handshake() ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取 本地颁发者证书 (_ssl.c:1108)

上述异常是以下异常的直接原因:

Traceback(最近一次调用最后一次):文件 “/Users/mellie/PycharmProjects/Dominations/Domi.py”,第 24 行,在 client.run(TOKEN) 文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/client.py”, 第 640 行,运行中 返回 future.result() 文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/client.py”, 第 621 行,在亚军中 等待 self.start(*args, **kwargs) 文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/client.py”, 第 584 行,开始 等待 self.login(*args, bot=bot) 文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/client.py”, 第 442 行,登录 等待self.http.static_login(token.strip(),bot = bot)文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/http.py”, 第 256 行,在 static_login 中 数据 = 等待 self.request(Route('GET', '/users/@me')) 文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/http.py ", 第 160 行,应要求提供 async with self.session.request(method, url, **kwargs) as r: File “/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/client.py”, 第 1012 行,在 __aenter self._resp = 等待 self._coro 文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/client.py”, 第 480 行,在 _request 中 conn =等待self._connector.connect(文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py”, 第 523 行,连接中 proto = await self._create_connection(req, traces, timeout) 文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py”, 第 858 行,在 _create_connection 中 _,原型 = 等待 self._create_direct_connection(文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py”, 第 1004 行,在 _create_direct_connection 提出 last_exc 文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py”, 第 980 行,在 _create_direct_connection 中 传输,原型 = 等待 self._wrap_create_connection(文件“/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py”, 第 938 行,在 _wrap_create_connection 引发 ClientConnectorCertificateError(aiohttp.client_exceptions.ClientConnectorCertificateError:不能 连接到主机 discordapp.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败: 无法获取本地颁发者证书 (_ssl.c:1108)')]

进程以退出代码 1 结束

【问题讨论】:

  • 您是如何访问互联网的?如果您使用一些公共 wifi,请确保不和谐没有被主机防火墙阻止。谢谢
  • 这是家庭互联网。

标签: python discord.py


【解决方案1】:

这个github问题here。 说:

基本上导航到您的 Applications/Python 3.6/ 文件夹并加倍 单击 Install Certificates.command。

尝试在 3.6 上运行相同的程序并运行安装证书命令。这可能会解决您的问题

【讨论】:

  • 我尝试了 3.8/folder 并双击。它没有用。
  • 降级到 python 3.5 或 3.6
  • 我在使用 pygame2 和 python 3.9 时遇到了这个问题。我双击了安装证书命令。没有错误。然后一切都很好。谢谢。
  • 我有同样的问题,我导航到我的 mac 中的 python 文件夹,我点击了名为“Install Certificates.command”的文件,它被修复了。就我而言,它是 python 3.9 它应该与所有其他 python 3 版本几乎相同。
  • 上帝保佑这对我有用,我有 Python 3.9
【解决方案2】:

我遇到了同样的错误,但是我通过转到我的 mac 中的 Applications 文件夹来修复它,然后转到 python 3.9,然后我单击安装证书文件,然后它打开终端然后下载证书文件。

【讨论】:

    【解决方案3】:

    在 python 目录中运行以下脚本(适用于 Mac),

    install Certificate.command
    

    【讨论】:

      【解决方案4】:

      像这样将ssl=true&ssl_cert_reqs=CERT_NONE 添加到您的 MongoDB URI 中

      >>> uri = 'mongodb://example.com/?ssl=true&ssl_cert_reqs=CERT_NONE'
      >>> client = pymongo.MongoClient(uri)
      

      最重要的是ssl_cert_reqs=CERT_NONE

      访问https://api.mongodb.com/python/current/examples/tls.html了解更多信息

      【讨论】:

        【解决方案5】:

        您不使用 python 3.6,所以上面的答案不是正确的。我有同样的问题,我发现你可以使用 Anaconda,创建一个环境,将 discord.py 安装到环境中,因为你使用 PyCharm,所以使用环境作为其中的解释器。

        【讨论】:

          【解决方案6】:

          这可能是 Discord 方面的问题,暂时无法解决。我遇到了与RedBot framework 相同的问题。他们recently stated 表示“问题与 Discord 的根证书有关,目前没有推荐的修复方法。”

          【讨论】:

            【解决方案7】:

            我在 Linux 发行版上进行抓取时遇到此错误:

            requests.exceptions.SSLError: HTTPSConnectionPool(host='api.scraperapi.com', port=XX): Max retries exceeded with url: /account?api_key=MY_KEY (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)')))
            

            我将 Spyder 与 Python 3.8 和 pyenv 一起使用。对我来说,只需更新 pip 证书即可解决此问题:

            pip3 install --upgrade certifi
            

            我没有使用 discord,但我认为其他有这个“1108”问题的人可能希望看到这个潜在的简单解决方案。尤其是那些在 Linux 上的。当我在寻找解决方案时,这似乎是 Mac 用户更常见的问题。

            【讨论】:

              【解决方案8】:

              真正的原因是python库无法在证书链中找到中间CA。

              对于 DISCORD:

              DIGICERT BALTIMORE ROOT(根)-> Cloudflare INC ECC CA-3(中级)-> sni.cloudflaressl.com

              这是证书链。

              所有系统都有根,但没有中间。您所要做的就是在您的 ca 商店中手动安装中间 CA

              【讨论】:

              • 你能提供一些支持这一点的文件吗?每个地区每次安装 Discord 时总是如此吗?谢谢!
              • 嘿,这不是 Discord 特有的问题。相反,这是一个应用程序库问题,以及 Python 或任何其他语言如何使用证书。这就是证书链的工作方式,
              • 我无法想象现有的每个证书链都通过 Digicert 和两个 Cloudflare 域。它似乎是特定于应用程序的。
              • 我的意思是,ROOT证书已经在机器中,因为中间证书不存在,问题正在发生。我展示了示例,因为我手动验证了 Discord 当前正在使用的当前证书链
              猜你喜欢
              • 1970-01-01
              • 2021-09-17
              • 2021-11-25
              • 2020-12-13
              • 1970-01-01
              • 2020-04-06
              • 2020-03-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多