Réponse rapide
Que signifie SSL: WRONG_VERSION_NUMBER avec un proxy ?
[SSL: WRONG_VERSION_NUMBER] via un proxy signifie presque toujours que votre client a démarré une négociation TLS avec quelque chose qui répond en clair. La cause habituelle est une URL de proxy https:// pointant vers un port proxy HTTP classique. Avec CrawlRelay, écrivez http:// devant l’adresse de la passerelle pour cibles HTTP et HTTPS ; le HTTPS du site passe toujours par le tunnel.
SSL: WRONG_VERSION_NUMBER en un coup d'œil
| Erreur | SSL: WRONG_VERSION_NUMBER |
|---|---|
| Type | Erreur TLS côté client |
| Envoyé par | Votre bibliothèque TLS, lorsque la partie distante ne parle pas TLS |
| Défini dans | TLS 1.3: RFC 8446; HTTP proxy CONNECT: RFC 9110, section 9.3.6 |
| Réessayer ? | Non. C’est une erreur de configuration |
| Vérification initiale | Regardez le schéma en début d’URL proxy |
Que signifie SSL: WRONG_VERSION_NUMBER ?
Le TLS commence par un enregistrement de négociation. Si ce qui revient est une réponse HTTP, la bibliothèque TLS lit un numéro de version incohérent et s’arrête. Python rapporte WRONG_VERSION_NUMBER ; la formulation exacte varie selon la version d’OpenSSL et le client.
Le schéma de l’URL proxy décide comment votre client parle au proxy. http:// signifie HTTP simple vers le proxy, suivi d’un tunnel CONNECT et TLS vers le site. https:// signifie TLS avec le proxy, possible seulement si le port proxy attend du TLS.
À quoi ressemble SSL: WRONG_VERSION_NUMBER 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 requests / urllib3 2.x :
SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number'))encapsulé dans uneProxyError - httpx :
httpx.ConnectError: [SSL: WRONG_VERSION_NUMBER] wrong version number - curl :
curl: (35) ... wrong version numbersi vous écrivez-x https://pour un proxy simple - Node.js :
EPROTO ... wrong version numberdans le message d’erreur
Quelles sont les causes de SSL: WRONG_VERSION_NUMBER ?
Probablement en premier lieu :
https://devant l’adresse du proxy sur un port qui parle HTTP simple. C’est le cas le plus courant.- Paramètres copiés-collés d’un fournisseur dont le port proxy attend TLS.
https://sur une URL avec port 80, ouhttp://sur port site qui attend TLS, hors proxy.- Une variable d’environnement comme
HTTPS_PROXY=https://...héritée par votre code.
Comment diagnostiquer SSL: WRONG_VERSION_NUMBER étape par étape ?
- Affichez l’URL du proxy utilisée par votre code et vérifiez son schéma.
- Vérifiez la présence de
HTTPS_PROXYetALL_PROXYdans l’environnement. - Lancez le test curl ci-dessous avec
-x http://et vérifiez que ça fonctionne. - Si curl marche et pas votre code, votre code ou environnement utilise encore
https://.
# 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 SSL: WRONG_VERSION_NUMBER ?
- Utilisez
http://pour l’URL proxy dans chaque clé :{"http": "http://...", "https": "http://..."}. - Laissez la vérification TLS activée. Le correctif est dans le schéma, pas dans
verify=False. - Corrigez la variable d’environnement au lieu de la surcharger dans un script.
Dois-je réessayer après SSL: WRONG_VERSION_NUMBER ?
Ne retentez jamais cette erreur : chaque tentative échoue de la même façon. C’est une correction de configuration d’un caractère.
Quelle est l'incidence de SSL: WRONG_VERSION_NUMBER sur CrawlRelay ?
Le port HTTP de CrawlRelay est un port de proxy HTTP simple transportant les sites HTTPS via des tunnels CONNECT. Le TLS s’effectue de bout en bout entre votre client et le site dans le tunnel, donc la passerelle ne nécessite jamais une URL de proxy https://.
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 : Échec de la validation du certificat SSL · Impossible de se connecter au proxy · Guide Python.
SSL: WRONG_VERSION_NUMBER : questions fréquentes des développeurs
Mon trafic n’est-il pas chiffré si j’utilise une URL proxy http:// ?
Pas pour les sites HTTPS. Le schéma http:// ne couvre que l’échange court CONNECT avec le proxy, incluant vos identifiants. Ensuite, votre client exécute TLS directement avec le site dans le tunnel, et le proxy ne transmet que des octets chiffrés. Les sites en http:// simple ne sont pas chiffrés, avec ou sans proxy.
Pourquoi cela a-t-il commencé après une mise à jour d’urllib3 ?
urllib3 2.x supporte les proxies HTTPS, donc il prend une URL proxy https:// au pied de la lettre et démarre un TLS avec le proxy. Les anciennes configurations fonctionnaient parfois par accident avec un mauvais schéma. Écrivez http:// pour ports proxy HTTP classique et l’erreur disparaît.
Dois-je mettre verify=False pour supprimer l’erreur ?
Non. Désactiver la vérification des certificats ne corrige pas un schéma erroné et vous expose à une interception sur chaque requête. Corrigez le schéma dans l’URL proxy. Gardez la vérification activée en production.
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.