[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
Python couldn't verify the server's certificate
Seen in Python ssl, requests, urllib3, httpx, aiohttp, urllib (ssl.SSLCertVerificationError)
Python could not verify the server certificate; the text after "certificate verify failed:" gives the exact reason.
Common causes
- "unable to get local issuer certificate": the server omits its intermediate, or Python cannot find a CA bundle (common with python.org builds on macOS).
- A corporate proxy or antivirus re-signs HTTPS traffic with a CA that certifi does not include.
- "certificate has expired" or "self-signed certificate": the server certificate itself is the problem.
- An outdated certifi package or OS CA store.
How to fix it
- Update the CA bundle: pip install --upgrade certifi; on macOS python.org installs, run "Install Certificates.command".
- For a corporate CA, set REQUESTS_CA_BUNDLE or SSL_CERT_FILE to a PEM file that includes it, or use the truststore package to use the OS trust store.
- If the server omits its intermediate, fix the server to send the full chain.
- verify=False only hides the problem and is not a fix.
Got a different message? Paste it into the error explainer.
Related errors
- certificate verify failed: Hostname mismatch, certificate is not valid for · The certificate doesn't cover this hostname
- PKIX path building failed · Java can't build a trusted certificate chain
- javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure · The server rejected the TLS handshake
- No subject alternative DNS name matching example.com found · The certificate doesn't cover this hostname
- x509: certificate signed by unknown authority · Go doesn't trust the certificate's issuer
- x509: certificate is valid for X, not Y · The certificate doesn't cover this hostname
- remote error: tls: handshake failure · The server rejected the TLS handshake
- The SSL connection could not be established, see inner exception. · .NET could not complete the TLS handshake
- The remote certificate is invalid according to the validation procedure · .NET doesn't trust the server's certificate
- The request was aborted: Could not create SSL/TLS secure channel. · .NET Framework could not negotiate TLS
- cURL error 60: SSL certificate problem: unable to get local issuer certificate · PHP cURL can't verify the server's certificate
- stream_socket_enable_crypto(): SSL operation failed with code 1 · PHP failed to set up TLS on a stream