Respuesta rápida
¿Qué significa SSL: WRONG_VERSION_NUMBER con un proxy?
[SSL: WRONG_VERSION_NUMBER] a través de un proxy casi siempre significa que tu cliente inició un handshake TLS con algo que respondió en texto plano. La causa habitual es una URL de proxy https:// apuntando a un puerto proxy HTTP simple. Con CrawlRelay, escribe http:// delante de la dirección de la puerta de enlace tanto para destinos HTTP como HTTPS; el HTTPS propio del sitio sigue funcionando dentro del túnel.
SSL: WRONG_VERSION_NUMBER en pocas palabras
| Error | SSL: WRONG_VERSION_NUMBER |
|---|---|
| Tipo | Error TLS en el cliente |
| Enviado por | Tu biblioteca TLS, cuando el otro lado no habla TLS |
| Definido en | TLS 1.3: RFC 8446; HTTP proxy CONNECT: RFC 9110, section 9.3.6 |
| ¿Reintentar? | No. Es un error de configuración |
| Primera comprobación | Mira el esquema delante de la URL del proxy |
¿Qué significa SSL: WRONG_VERSION_NUMBER?
TLS empieza con un registro de handshake. Si los bytes que regresan son una respuesta HTTP en lugar de eso, la biblioteca TLS lee un número de versión inválido y para. Python reporta WRONG_VERSION_NUMBER; la redacción varía con la versión de OpenSSL y el cliente.
El esquema de la URL del proxy decide cómo el cliente habla con el proxy. http:// significa HTTP plano con el proxy, seguido por túnel CONNECT y TLS con el sitio web. https:// significa TLS con el mismo proxy, que sólo funciona si el puerto del proxy espera TLS.
¿Cómo se ve SSL: WRONG_VERSION_NUMBER en Python, curl, Node.js y navegadores?
El mismo fallo se muestra de forma diferente en cada herramienta. Estos son los mensajes que debes buscar en tus registros:
- Python requests / urllib3 2.x:
SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number'))envuelto en unProxyError - httpx:
httpx.ConnectError: [SSL: WRONG_VERSION_NUMBER] wrong version number - curl:
curl: (35) ... wrong version numbercuando escribes-x https://para un proxy simple - Node.js:
EPROTO ... wrong version numberen el mensaje de error
¿Qué causa SSL: WRONG_VERSION_NUMBER?
Lo más probable al principio:
https://delante de la dirección del proxy en un puerto que habla HTTP plano. Es el caso más común.- Configuraciones copiadas de un proveedor cuyo puerto proxy sí espera TLS.
https://en una URL con puerto 80, ohttp://en un puerto de sitio que espera TLS, fuera de cualquier proxy.- Una variable de entorno como
HTTPS_PROXY=https://...que tu código hereda.
¿Cómo diagnostico SSL: WRONG_VERSION_NUMBER paso a paso?
- Imprime la URL del proxy que tu código usa y revisa su esquema.
- Revisa el entorno para
HTTPS_PROXYyALL_PROXY. - Ejecuta la prueba curl abajo con
-x http://y confirma que funciona. - Si curl funciona y tu código no, tu código o entorno todavía usa
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_URL¿Cómo soluciono SSL: WRONG_VERSION_NUMBER?
- Usa
http://para la URL del proxy en cada clave:{"http": "http://...", "https": "http://..."}. - Deja activa la verificación TLS. La solución es el esquema, no
verify=False. - Corrige la variable de entorno en lugar de sobreescribir en un script.
¿Debo reintentar después de SSL: WRONG_VERSION_NUMBER?
Nunca reintentes este error: cada intento falla igual. Es una corrección de configuración de un solo carácter.
¿Cómo se aplica SSL: WRONG_VERSION_NUMBER a CrawlRelay?
El puerto HTTP de CrawlRelay es un puerto proxy HTTP plano que transporta sitios HTTPS mediante túneles CONNECT. TLS funciona de extremo a extremo entre tu cliente y el sitio web dentro del túnel, así que la puerta de enlace nunca necesita una URL de proxy https://.
Gateway: gw.crawlrelay.com, puerto 7777 (HTTP, HTTPS a través de CONNECT) y puerto 7778 (SOCKS5). Formato de usuario: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Relacionado: Error de verificación de certificado SSL · No se puede conectar al proxy · Guía Python.
SSL: WRONG_VERSION_NUMBER: preguntas que hacen los desarrolladores
¿Mi tráfico no está cifrado si uso una URL proxy http://?
No para sitios HTTPS. El esquema http:// sólo cubre el intercambio corto CONNECT con el proxy, que incluye tus credenciales. Después, el cliente ejecuta TLS directamente con el sitio dentro del túnel, y el proxy sólo reenvía bytes cifrados. Los sitios con http:// plano están sin cifrar con o sin proxy.
¿Por qué empezó esto tras actualizar urllib3?
urllib3 2.x soporta proxies HTTPS, así que toma literalmente una URL de proxy https:// y arranca TLS con el proxy. Configuraciones antiguas a veces funcionaban por accidente con esquema erróneo. Escribe http:// para puertos proxy HTTP plano y el error desaparece.
¿Debo poner verify=False para eliminar el error?
No. Desactivar la verificación de certificados no arregla un esquema erróneo y te expone a interceptación en cada petición. Corrige el esquema de la URL del proxy. Mantén la verificación activada en producción.
Otros errores de proxy en esta referencia
Códigos de estado HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Errores de navegador y cliente
Errores de conexión y TLS
Proxies residenciales con documentación que cubre los casos de fallo
CrawlRelay proxies residenciales de 0,50 US$/GB, tráfico que nunca expira.