Resposta rápida
O que SSL: WRONG_VERSION_NUMBER significa com um proxy?
[SSL: WRONG_VERSION_NUMBER] via proxy quase sempre indica que seu cliente iniciou handshake TLS com algo que respondeu texto simples. A causa comum é URL https:// apontando para porta HTTP comum. Com CrawlRelay, escreva http:// antes do endereço do gateway, para alvos HTTP e HTTPS; o HTTPS do site continua dentro do túnel.
SSL: WRONG_VERSION_NUMBER de relance
| Erro | SSL: WRONG_VERSION_NUMBER |
|---|---|
| Tipo | Erro TLS no cliente |
| Enviado por | Sua biblioteca TLS, quando o outro lado não fala TLS |
| Definido em | TLS 1.3: RFC 8446; HTTP proxy CONNECT: RFC 9110, section 9.3.6 |
| Tentar novamente? | Não. É erro de configuração |
| Primeira verificação | Veja o esquema na frente da URL do proxy |
O que SSL: WRONG_VERSION_NUMBER significa?
TLS começa com um registro de handshake. Se os bytes retornados forem uma resposta HTTP, a biblioteca TLS lê número de versão inválido e para. Python mostra WRONG_VERSION_NUMBER; texto varia com OpenSSL e cliente.
O esquema da URL do proxy decide como seu cliente fala com o proxy. http:// é HTTP simples com túnel CONNECT e TLS com o site. https:// é TLS com o proxy, que só funciona se a porta espera TLS.
Como SSL: WRONG_VERSION_NUMBER aparece em Python, curl, Node.js e navegadores?
A mesma falha aparece de forma diferente em cada ferramenta. Estas são as mensagens para buscar nos seus logs:
- Python requests / urllib3 2.x:
SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number'))dentro deProxyError - httpx:
httpx.ConnectError: [SSL: WRONG_VERSION_NUMBER] wrong version number - curl:
curl: (35) ... wrong version numberquando você escreve-x https://para proxy simples - Node.js:
EPROTO ... wrong version numberna mensagem de erro
O que causa SSL: WRONG_VERSION_NUMBER?
Mais provável inicialmente:
https://na frente do endereço do proxy em porta que usa HTTP simples. O caso mais comum.- Configurações copiadas de provedor cujo proxy espera TLS.
https://em URL com porta 80, ouhttp://em porta de site que espera TLS, fora de proxy.- Variável de ambiente como
HTTPS_PROXY=https://...herdada pelo seu código.
Como diagnosticar SSL: WRONG_VERSION_NUMBER passo a passo?
- Imprima a URL do proxy usada e cheque o esquema.
- Verifique no ambiente
HTTPS_PROXYeALL_PROXY. - Rode o teste curl abaixo com
-x http://e confirme que funciona. - Se curl funciona e código não, seu código ou ambiente ainda 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_URLComo corrigir SSL: WRONG_VERSION_NUMBER?
- Use
http://na URL do proxy em todas as chaves:{"http": "http://...", "https": "http://..."}. - Mantenha a verificação TLS ligada. A correção é o esquema, não
verify=False. - Corrija variável de ambiente em vez de sobrescrever em script.
Devo tentar novamente após SSL: WRONG_VERSION_NUMBER?
Nunca reexecute esse erro: toda tentativa falha igual. É ajuste de configuração de um caractere.
Como SSL: WRONG_VERSION_NUMBER se aplica ao CrawlRelay?
A porta HTTP do CrawlRelay é proxy HTTP simples que carrega sites HTTPS por túneis CONNECT. TLS vai fim a fim entre seu cliente e o site dentro do túnel; o gateway nunca precisa da URL de proxy https://.
Gateway: gw.crawlrelay.com, porta 7777 (HTTP, HTTPS via CONNECT) e porta 7778 (SOCKS5). Formato do usuário: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Relacionado: Erro na verificação do certificado SSL · Não foi possível conectar ao proxy · Guia Python.
SSL: WRONG_VERSION_NUMBER: perguntas que desenvolvedores fazem
Meu tráfego não fica sem criptografia se usar URL proxy http://?
Não para sites HTTPS. O esquema http:// cobre só a curta troca CONNECT com o proxy, incluindo suas credenciais. Após isso, seu cliente roda TLS direto com o site no túnel, e o proxy só encaminha bytes criptografados. Sites plain http:// ficam sem criptografia com ou sem proxy.
Por que isso começou após atualizar urllib3?
urllib3 2.x suporta proxies HTTPS, então considera literal URL https:// e inicia TLS com proxy. Configurações antigas às vezes funcionavam por acidente com esquema errado. Use http:// para porta proxy HTTP simples e erro some.
Devo usar verify=False para eliminar o erro?
Não. Desligar verificação de certificado não corrige esquema errado, e expõe a interceptação em cada requisição. Corrija esquema da URL do proxy. Mantenha verificação em produção.
Outros erros de proxy nesta referência
Códigos de status HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Erros no navegador e cliente
Erros de conexão e TLS
Proxies residenciais com documentação que cobre os casos de falha
CrawlRelay proxies residenciais a partir de US$ 0,50/GB, tráfego que nunca expira.