Réponse rapide
Que signifie SSL: CERTIFICATE_VERIFY_FAILED avec un proxy ?
CERTIFICATE_VERIFY_FAILED signifie que votre client n'a pas pu valider le certificat TLS du site web. Via un proxy CONNECT tel que la passerelle CrawlRelay, TLS fonctionne de bout en bout, donc le proxy n'en est pas la cause. Cherchez de votre côté : un bundle CA obsolète, un antivirus ou un pare-feu d'entreprise qui inspecte le HTTPS, ou une horloge système erronée. Ne le réparez jamais avec verify=False en production.
SSL: CERTIFICATE_VERIFY_FAILED en un coup d'œil
| Erreur | SSL: CERTIFICATE_VERIFY_FAILED |
|---|---|
| Type | Erreur de certificat TLS côté client |
| Envoyé par | Votre bibliothèque TLS, lorsqu'elle ne peut pas valider le certificat du site web |
| Défini dans | X.509 path validation: RFC 5280; TLS 1.3: RFC 8446 |
| Réessayer ? | Non. Corrigez le magasin de confiance ou le réseau |
| Vérification initiale | Testez la même URL sans le proxy sur la même machine |
Que signifie SSL: CERTIFICATE_VERIFY_FAILED ?
Lors de la négociation TLS, le site web envoie une chaîne de certificats. Votre client la vérifie par rapport à une liste d'autorités de confiance, le magasin de confiance, et contrôle les noms et les dates. Si une vérification échoue, la connexion est interrompue.
Avec un tunnel CONNECT, le proxy transmet la négociation sans modification, donc le certificat que vous voyez est celui du site. Quelque chose qui insère son propre certificat, comme un logiciel d'inspection, ou un magasin de confiance périmé sur votre machine, est la cause habituelle.
À quoi ressemble CERTIFICATE_VERIFY_FAILED en Python, curl, Node.js et navigateurs ?
La même erreur s'affiche différemment selon chaque outil. Voici les messages à rechercher dans vos logs :
- Python :
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate - Node.js :
UNABLE_TO_GET_ISSUER_CERT_LOCALLYouSELF_SIGNED_CERT_IN_CHAIN - curl :
curl: (60) SSL certificate problem: unable to get local issuer certificate - Navigateurs :
NET::ERR_CERT_AUTHORITY_INVALID
Quelles sont les causes de CERTIFICATE_VERIFY_FAILED ?
Probablement en premier lieu :
- Un bundle CA obsolète, par exemple un ancien paquet
certifisous Python. - Inspection HTTPS par un antivirus, un pare-feu d'entreprise ou un proxy de débogage, qui présente son propre certificat.
- Une horloge système erronée qui fait apparaître les certificats valides comme expirés ou pas encore valides.
- Un site avec une chaîne cassée, manquant un certificat intermédiaire.
- Une image de conteneur sans le paquet de certificats CA système.
Comment diagnostiquer CERTIFICATE_VERIFY_FAILED étape par étape ?
- Lancez la même requête sans le proxy. Si ça échoue aussi, le proxy n’est pas impliqué.
- Affichez l’émetteur du certificat avec
openssl s_clientou curl-v: un émetteur portant le nom de votre antivirus ou pare-feu indique une interception. - Vérifiez la date et l’heure système.
- Mettez à jour le bundle CA et retestez.
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URLComment résoudre CERTIFICATE_VERIFY_FAILED ?
- Mettez à jour
certifi(pip install -U certifi) ou votre paquet CA système. - Ajoutez le certificat d’inspection de votre entreprise au magasin de confiance si votre réseau requiert une inspection, ou lancez le scraper hors de ce réseau.
- Réglez l’horloge avec une synchronisation réseau.
- Installez des certificats CA dans les images de conteneurs allégées, par exemple le paquet
ca-certificates. - Ne désactivez pas la vérification dans le code qui envoie des identifiants ou collecte des données critiques.
Dois-je réessayer après CERTIFICATE_VERIFY_FAILED ?
N’essayez pas à nouveau : le même magasin de confiance échoue de la même manière. Corrigez le magasin de confiance, l’horloge ou le chemin réseau, puis relancez.
Quelle est l'incidence de SSL: CERTIFICATE_VERIFY_FAILED sur CrawlRelay ?
Le port HTTP de CrawlRelay tunnelise le HTTPS avec CONNECT, donc le certificat vérifié par votre client est celui envoyé par le site web. Si l’erreur n’apparaît qu’à travers la passerelle et jamais sans, contactez le support avec le nom d’hôte ciblé et l’erreur complète pour que nous puissions vérifier le côté sortie.
Passerelle : gw.crawlrelay.com, port 7777 (HTTP, HTTPS via CONNECT) et port 7778 (SOCKS5). Format du nom d'utilisateur : USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Voir aussi : SSL: WRONG_VERSION_NUMBER · Connexion réinitialisée · Guide Python.
SSL: CERTIFICATE_VERIFY_FAILED : questions fréquentes des développeurs
Un proxy peut-il causer des erreurs de certificat SSL ?
Un proxy interceptant le peut, car il présente son propre certificat. Un proxy tunnel CONNECT ne le peut pas, car il ne transmet que des octets chiffrés et ne voit jamais le contenu de la négociation. Faites la même requête sans proxy : si l’erreur persiste, la cause est dans votre machine ou réseau.
Est-ce que verify=False est sûr pour le scraping ?
Pas comme solution. Cela masque l’inspection et les chaînes cassées, et un attaquant sur le chemin pourrait alors lire ou modifier votre trafic, y compris les jetons et cookies. Utilisez-le seulement pour un test local rapide et jamais dans un job automatisé ou envoyant des identifiants.
Pourquoi ça échoue dans Docker mais fonctionne sur mon portable ?
Les images de conteneurs allégées sont souvent livrées sans certificats CA, donc aucun certificat n’est validable. Installez le paquet CA système dans l’image, ou utilisez le bundle certifi en Python. Vérifiez aussi que l’horloge du conteneur est correcte.
Autres erreurs de proxy dans cette référence
Codes d'état HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Erreurs du navigateur et du client
Erreurs de connexion et TLS
Proxies résidentiels avec documentation couvrant les cas de défaillance
Proxies résidentiels CrawlRelay de 0,50 $US/GB, trafic sans expiration.