SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108) Discord/python
Asked Answered
C

10

11

I'm using Pycharm and python 3.8 and latest version of discord. I tried to run this script but got this error. Can anyone help?

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)

------ error below -------

/Users/mellie/PycharmProjects/Dominations/venv/bin/python /Users/mellie/PycharmProjects/Dominations/Domi.py Traceback (most recent call last): File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 936, in _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", line 1042, in create_connection transport, protocol = await self._create_connection_transport( File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", line 1072, in _create_connection_transport await waiter File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/sslproto.py", line 529, in data_received ssldata, appdata = self._sslpipe.feed_ssldata(data) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/sslproto.py", line 189, in feed_ssldata self._sslobj.do_handshake() File "/Library/Frameworks/Python.framework/Versions/3.8/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:1108)

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/Users/mellie/PycharmProjects/Dominations/Domi.py", line 24, in client.run(TOKEN) File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/client.py", line 640, in run return future.result() File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/client.py", line 621, in runner await self.start(*args, **kwargs) File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/client.py", line 584, in start await self.login(*args, bot=bot) File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/client.py", line 442, in login await self.http.static_login(token.strip(), bot=bot) File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/http.py", line 256, in static_login data = await self.request(Route('GET', '/users/@me')) File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/discord/http.py", line 160, in request async with self.session.request(method, url, **kwargs) as r: File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/client.py", line 1012, in __aenter self._resp = await self._coro File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/client.py", line 480, in _request conn = await self._connector.connect( File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 523, in connect proto = await self._create_connection(req, traces, timeout) File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 858, in _create_connection _, proto = await self._create_direct_connection( File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 1004, in _create_direct_connection raise last_exc File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 980, in _create_direct_connection transp, proto = await self._wrap_create_connection( File "/Users/mellie/PycharmProjects/Dominations/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 938, in _wrap_create_connection raise ClientConnectorCertificateError( aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host discordapp.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)')]

Process finished with exit code 1

Coon answered 19/12, 2019 at 14:5 Comment(2)
how you are accessing the internet ? If you are using some public wifi make sure the discord is not blocked by the host firewall. ThanksNagey
it's the home internet.Coon
F
28

This github issue here. Says:

Basically navigate to your Applications/Python 3.6/ folder and double click the Install Certificates.command.

Try running this same program on 3.6 and run the install certificates command. This is likely to solve your issue

Florin answered 19/12, 2019 at 14:20 Comment(7)
I tried that with 3.8/folder and double click. it didn't work.Coon
Downgrade to python 3.5 or 3.6Florin
I had this problem with pygame2 and python 3.9. I double clicked on the install certificates command. No errors. Then it was all good. Thx.Rhnegative
i had same issue and i navigated to python folder in my mac and i clicked the file named "Install Certificates.command" and it was fiexed. for my case it was python 3.9 it should be pretty same for all other python 3 versions .Dornick
God bless this worked for me and I had Python 3.9Montpellier
Wonderful, fixed the issue for me on Python 3.8Virgilio
This fixed my issue when upgrading to 3.10 using the official installer. Previously I had used homebrew, which seems to handle this step.Jacy
K
14

I got the same error, but I fixed it by going to my Applications folder in my mac, going to python 3.9, and clicking on the install certificate file. It opened the terminal then it downloaded the certificate files.

Kava answered 30/1, 2021 at 15:29 Comment(0)
N
3

Add ssl=true&ssl_cert_reqs=CERT_NONE to your MongoDB URI like this

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

Most importantly the ssl_cert_reqs=CERT_NONE

Visit https://api.mongodb.com/python/current/examples/tls.html for more information

Noelianoell answered 25/8, 2020 at 7:55 Comment(0)
J
2

Run the below script(Works For Mac) in the python directory,

install Certificate.command
Joyce answered 15/5, 2020 at 6:14 Comment(0)
O
0

You don't use python 3.6 so the answer above is not the right one. I had the same problem and I figured out you could just use Anaconda, create an enviroment, install discord.py to the enviroment and since you use PyCharm, use the enviroment as the interpreter in it.

Outgeneral answered 31/3, 2020 at 17:45 Comment(0)
M
0

Its possible that this is an issue on discord's side, with no possible fix for the time being. I am running into the same problem with the RedBot framework. They recently stated that the "issue is related to Discord's root certificate and there is currently no recommended fix available."

Mho answered 11/6, 2020 at 19:33 Comment(0)
T
0

I was getting this error while doing some scraping on a Linux distro:

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)')))

I'm using Spyder with Python 3.8 and pyenv. For me, simply updating pip certificates solved this issue:

pip3 install --upgrade certifi

I was NOT using discord, but I thought others with this "1108" issue might want to see this potentially easy solution. Especially those on Linux. When I was searching for a solution, it seemed like this was a more common issue for Mac users.

Theory answered 18/12, 2020 at 16:52 Comment(1)
Did not solve the issue for me. But always a good idea to update the certificates first. I think the Max retries is the problem...Adverb
R
0

The real reason is the python library is not able to find the intermediate CA in the certificate chain.

For DISCORD:

DIGICERT BALTIMORE ROOT(Root) -> Cloudflare INC ECC CA-3 (Intermediate) -> sni.cloudflaressl.com

this is the certificate chain.

All the systems will have the root but not the intermediate. All you have to do is manually install the intermediate CA in your ca store

Risible answered 16/6, 2021 at 20:39 Comment(4)
Could you provide some documentation supporting this? Is this always the case for every installation of Discord in every region? Thanks!Aveyron
Hey, this is not Discord specific issue. Rather this is an application library issue and how Python or any other language is using the certificate. This is how the certificate chain works,Risible
I wouldn't imagine that every certificate chain in existence goes through Digicert and two Cloudflare domains. It seems application-specific.Aveyron
All I am saying, the ROOT certificate is already there in the machine, because the intermediate certificate is not there, the problem is occurring. I showed the example, as I manually verified the current certificate chain that Discord is currently usingRisible
B
0

Use certifi along with urllib3


import urllib3
import certifi


url = 'https://blablablabla.com'
ssl_certs = certifi.where()
http = urllib3.PoolManager(ca_certs=ssl_certs)
resp = http.request('GET', url)

print(resp.status)
Brassware answered 6/7, 2022 at 6:8 Comment(0)
N
0

I have the same problem. I tried updating the root certificate and even downloading the crt certificate file, but it still didn't solve it. I think it's a code problem, not a system problem So I used the following command to find the files currently read by SSL by default and check the corresponding files:

import ssl
paths = ssl.get_default_verify_paths()
print(paths)

I found that there was no corresponding pem file in this directory, so I modified it through export and pointed it to the correct file, which successfully solved the problem.

export SSL_CERT_FILE=/etc/pki/tls/cert.pem
export REQUESTS_CA_BUNDLE=/etc/pki/tls/cert.pem
Nullification answered 18/11, 2023 at 18:20 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.