Risposta rapida
Cosa significa SSL: WRONG_VERSION_NUMBER con un proxy?
[SSL: WRONG_VERSION_NUMBER] tramite un proxy quasi sempre significa che il client ha iniziato un handshake TLS con qualcosa che ha risposto in testo semplice. La causa più comune è un URL proxy https:// che punta a una porta proxy HTTP semplice. Con CrawlRelay, scrivi http:// davanti all'indirizzo gateway per destinazioni HTTP e HTTPS; l'HTTPS del sito funziona comunque attraverso il tunnel.
SSL: WRONG_VERSION_NUMBER a colpo d'occhio
| Errore | SSL: WRONG_VERSION_NUMBER |
|---|---|
| Tipo | Errore TLS nel client |
| Inviato da | La tua libreria TLS, quando l'altra parte non parla TLS |
| Definito in | TLS 1.3: RFC 8446; HTTP proxy CONNECT: RFC 9110, section 9.3.6 |
| Riprovarlo? | No. È un errore di configurazione |
| Prima verifica | Controlla lo schema davanti all’URL del proxy |
Cosa significa SSL: WRONG_VERSION_NUMBER?
TLS inizia con un record handshake. Se i byte che tornano sono una risposta HTTP invece, la libreria TLS legge un numero versione senza senso e si interrompe. Python riporta WRONG_VERSION_NUMBER; la formulazione esatta varia con la versione di OpenSSL e il client.
Lo schema dell'URL proxy decide come il tuo client comunica col proxy. http:// significa HTTP semplice verso il proxy, seguito da un tunnel CONNECT e TLS col sito. https:// significa TLS verso il proxy stesso, possibile solo se la porta proxy lo supporta.
Com'è SSL: WRONG_VERSION_NUMBER in Python, curl, Node.js e browser?
Lo stesso errore si presenta in modo diverso in ogni strumento. Questi sono i messaggi da cercare nei log:
- Python requests / urllib3 2.x:
SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number'))racchiuso in unProxyError - httpx:
httpx.ConnectError: [SSL: WRONG_VERSION_NUMBER] wrong version number - curl:
curl: (35) ... wrong version numberse scrivi-x https://per un proxy semplice - Node.js:
EPROTO ... wrong version numbernel messaggio d'errore
Cosa causa SSL: WRONG_VERSION_NUMBER?
Probabilmente prima:
https://davanti all'indirizzo proxy su una porta che parla HTTP semplice. Questo è il caso più comune.- Impostazioni copiate/incollate da un provider il cui proxy si aspetta TLS.
https://su un URL con porta 80, ohttp://su porta sito che si aspetta TLS, fuori da ogni proxy.- Una variabile d'ambiente come
HTTPS_PROXY=https://...ereditata dal tuo codice.
Come diagnostico SSL: WRONG_VERSION_NUMBER passo dopo passo?
- Stampa l'URL proxy che il tuo codice usa e controlla lo schema.
- Controlla l'ambiente per
HTTPS_PROXYeALL_PROXY. - Esegui il test curl qui sotto con
-x http://e conferma che funziona. - Se curl funziona e il tuo codice no, il tuo codice o ambiente usa ancora
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_URLCome risolvo SSL: WRONG_VERSION_NUMBER?
- Usa
http://per l'URL del proxy in ogni chiave:{"http": "http://...", "https": "http://..."}. - Lascia la verifica TLS attiva. La soluzione è lo schema, non
verify=False. - Correggi la variabile d'ambiente invece di sovrascriverla in uno script.
Devo riprovare dopo SSL: WRONG_VERSION_NUMBER?
Mai riprovare questo errore: ogni tentativo fallisce allo stesso modo. È una correzione di configurazione di un solo carattere.
Come si applica SSL: WRONG_VERSION_NUMBER a CrawlRelay?
La porta HTTP di CrawlRelay è una porta proxy HTTP semplice che trasporta siti HTTPS attraverso tunnel CONNECT. Il TLS funziona end-to-end tra il tuo client e il sito dentro il tunnel, quindi il gateway non ha mai bisogno di un URL proxy https://.
Gateway: gw.crawlrelay.com, porta 7777 (HTTP, HTTPS tramite CONNECT) e porta 7778 (SOCKS5). Formato username: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Correlato: Errore di verifica certificato SSL · Impossibile connettersi al proxy · Guida Python.
SSL: WRONG_VERSION_NUMBER: domande frequenti dagli sviluppatori
Il mio traffico non è criptato se uso un URL proxy http://?
Non per siti HTTPS. Lo schema http:// copre solo il breve scambio CONNECT col proxy, che include le tue credenziali. Dopo di che, il client esegue TLS direttamente col sito dentro il tunnel, e il proxy inoltra solo byte criptati. I siti http:// semplici sono non criptati sia con che senza proxy.
Perché è cominciato dopo l'aggiornamento di urllib3?
urllib3 2.x supporta proxy HTTPS, quindi prende alla lettera un URL proxy https:// e inizia TLS col proxy. Configurazioni più vecchie a volte funzionavano per caso con lo schema sbagliato. Scrivi http:// per porte proxy HTTP semplici e l’errore scompare.
Devo mettere verify=False per eliminare l’errore?
No. Disattivare i controlli di certificato non risolve uno schema sbagliato, e ti espone a intercettazioni su ogni richiesta. Correggi lo schema dell’URL proxy. Mantieni attiva la verifica in produzione.
Altri errori proxy in questo riferimento
Codici di stato HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Errori del browser e client
Errori di connessione e TLS
Proxy residenziali con documentazione che copre i casi di errore
Proxy residenziali CrawlRelay da 0,50 USD/GB, traffico che non scade mai.