How to Fix the SSL: CERTIFICATE_VERIFY_FAILED Error in Python

Zeeshan Afridi Feb 02, 2024
  1. SSL Certificate
  2. Causes of the SSL: CERTIFICATE_VERIFY_FAILED Error
  3. Fix the SSL: CERTIFICATE_VERIFY_FAILED Error
  4. Fix the SSL: CERTIFICATE_VERIFY_FAILED Error by Creating Unverified Context in SSL
  5. Fix the SSL: CERTIFICATE_VERIFY_FAILED Error by Creating an Unverified HTTP Context in SSL
  6. Fix the SSL: CERTIFICATE_VERIFY_FAILED Error With the pip Command
  7. Fix the SSL: CERTIFICATE_VERIFY_FAILED Error Using the Requests Module
  8. Conclusion
How to Fix the SSL: CERTIFICATE_VERIFY_FAILED Error in Python

SSL is a protocol to encrypt the data transmitted between users and the server. The server creates and sends the client a digital certificate to ensure that the data does not get tampered with.

When creating an SSL certificate, the CA checks the domain.

If the domain does not exist at the address specified in the certificate, the CA returns an error for the certificate authority (CA). We will learn more about SSL and the causes of the SSL: CERTIFICATE_VERIFY_FAILED error.

SSL Certificate

An SSL certificate is a digital certificate that enables businesses to establish a secure, encrypted connection with a web browser. When a business has an SSL certificate, any information exchanged between the business and the web browser will be encrypted, making it difficult for anyone to intercept and read the data.

This is important for businesses because it helps to protect sensitive information, such as credit card numbers and login credentials.

Causes of the SSL: CERTIFICATE_VERIFY_FAILED Error

There are a few reasons behind the SSL: CERTIFICATE_VERIFY_FAILED error. Each is explained below.

  1. One possibility is that the website’s SSL certificate is invalid, which means that the website is not using a valid certificate to encrypt the data and communication between the client and server. As a result, your browser cannot verify the website’s identity.

    This can be a security risk. It means that your data may not be properly encrypted and could be intercepted by third parties.

  2. Another possibility is that your browser does not recognize the website’s SSL certificate. This can happen if the website uses a self-signed certificate or a certificate from an unknown authority.

    In either case, your browser will not be able to properly verify the website’s identity, which can again be a security risk.

  3. Finally, the SSL: CERTIFICATE_VERIFY_FAILED error can also occur if there is a problem with the website’s SSL certificate chain. This can happen if one of the certificates in the chain is expired or revoked or the website is using an outdated SSL version.

    If you see this error, you must contact the website owner and ask them to fix the problem.

Fix the SSL: CERTIFICATE_VERIFY_FAILED Error

If you see the SSL: CERTIFICATE_VERIFY_FAILED error, your computer cannot verify the SSL certificate for the website you’re trying to visit. This can happen for various reasons, including problems with the website’s SSL certificate, your computer’s trust store, or network issues.

To fix the SSL: CERTIFICATE_VERIFY_FAILED error, you’ll need to figure out what is causing it.

Is it a problem with the website’s SSL certificate? If so, you can try visiting the site using a different browser or contacting the website owner to let them know.

If the problem is with your computer’s trust store, you’ll need to update your trust store with the latest certificates. And if the problem is with your network, you’ll need to troubleshoot your network connection.

Fix the SSL: CERTIFICATE_VERIFY_FAILED Error by Creating Unverified Context in SSL

Regarding SSL, one of the most important things to consider is the context in which it will be used. Unfortunately, there is no one-size-fits-all answer to this question, as the context in which SSL will be used will vary depending on the specific situation.

However, there are a few general tips that can help to create a more secure SSL context.

First, it is important to ensure that all SSL connections are made using strong cryptography. This means using strong algorithms, such as SHA-256 or SHA-512, and ensuring that all keys have a length of at least 2048 bits.

Additionally, verifying the server’s identity before making an SSL connection is important. This can be done by checking the server’s certificate against a trusted third-party source, such as a Certificate Authority.

Finally, it is also important to ensure that SSL connections are properly configured. This includes ensuring that all connections are made using the correct protocols and cipher suites and that all certificates are properly validated.

By following these tips, it is possible to create a more secure SSL context, which can help to protect sensitive data and ensure that communications are kept private.

import ssl

context = ssl._create_unverified_context()
urllib.request.urlopen(req, context=context)

Fix the SSL: CERTIFICATE_VERIFY_FAILED Error by Creating an Unverified HTTP Context in SSL

In SSL, an unverified HTTP context can be created by simply omitting verification of the server’s certificate. This is not recommended, as it leaves the client vulnerable to man-in-the-middle attacks.

However, it may be necessary in some cases, such as when connecting to a server that uses a self-signed certificate.

import ssl

ssl._create_default_https_context = ssl._create_unverified_context
urllib2.urlopen("https://google.com").read()

Fix the SSL: CERTIFICATE_VERIFY_FAILED Error With the pip Command

To update your SSL certificate with pip, ensure that you have installed the latest version of pip. You can do this by running the following command:

pip install --upgrade pip

Once you have the latest version of pip, you can then run the following command to update your SSL certificate:

pip install --upgrade certifi

If you need to update your SSL certificate for a specific reason, you can use the --force-reinstall option with the pip command. This will force pip to reinstall the certified package and overwrite any existing files:

pip install --upgrade certifi --force-reinstall

Fix the SSL: CERTIFICATE_VERIFY_FAILED Error Using the Requests Module

The Python Requests library is a great tool for making HTTP requests. Sometimes, you may need to set the ssl_verify option to False to bypass SSL verification.

This can be useful if you’re trying to connect to a server with an invalid or self-signed SSL certificate. Keep in mind that setting this option to False is generally not recommended, as it can leave you vulnerable to man-in-the-middle attacks.

requests.get(url, headers=Hostreferer, verify=False)

Conclusion

SSL is a protocol that gives security and trust between a server and a client. It’s used in many cases where you must protect sensitive information, like when using your credit card at a store.

What’s the problem? There’s a problem with the python-requests library when using SSL.

When you use Python to request to a server that uses SSL, the library, by default, will check the certificate to ensure it’s trusted. The problem is that the default Python installation doesn’t include a root certificate for every possible SSL certificate.

When you’re making requests to servers that use self-signed SSL certificates or certificates from a CA that is not in the Python certificate store, this will cause requests to fail. An HTTP Error will be raised with the error code of the SSL error.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

Related Article - Python Error