Szybka odpowiedź
Co oznacza SSL: WRONG_VERSION_NUMBER w kontekście proxy?
[SSL: WRONG_VERSION_NUMBER] przez proxy niemal zawsze oznacza, że klient rozpoczął handshake TLS z czymś, co odpowiedziało zwykłym tekstem. Zwykła przyczyna to URL proxy https:// wskazujący na port zwykłego proxy HTTP. W CrawlRelay wpisz http:// przed adresem bramy dla celów HTTP i HTTPS; HTTPS strony działa nadal przez tunel.
SSL: WRONG_VERSION_NUMBER w skrócie
| Błąd | SSL: WRONG_VERSION_NUMBER |
|---|---|
| Typ | Błąd TLS po stronie klienta |
| Wysłane przez | Twoja biblioteka TLS, gdy strona po drugiej stronie nie używa TLS |
| Zdefiniowano w | TLS 1.3: RFC 8446; HTTP proxy CONNECT: RFC 9110, section 9.3.6 |
| Spróbować ponownie? | Nie. To błąd konfiguracji |
| Najpierw sprawdź | Sprawdź schemat przed adresem proxy |
Co oznacza SSL: WRONG_VERSION_NUMBER?
TLS zaczyna się od rekordu handshake. Jeśli dane zwrócone są odpowiedzią HTTP zamiast tego, biblioteka TLS czyta nonsensowny numer wersji i się zatrzymuje. Python pokazuje WRONG_VERSION_NUMBER; treść różni się zależnie od wersji OpenSSL i klienta.
Schemat URL proxy decyduje, jak klient komunikuje się z proxy. http:// to zwykły HTTP do proxy, potem tunel CONNECT i TLS z witryną. https:// to TLS z samym proxy, co działa tylko gdy proxy oczekuje TLS na tym porcie.
Jak wygląda SSL: WRONG_VERSION_NUMBER w Python, curl, Node.js i przeglądarkach?
Ten sam błąd wyświetla się inaczej w każdym narzędziu. Oto komunikaty, które warto wyszukać w logach:
- Python requests / urllib3 2.x:
SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number'))opakowany wProxyError - httpx:
httpx.ConnectError: [SSL: WRONG_VERSION_NUMBER] wrong version number - curl:
curl: (35) ... wrong version numbergdy wpiszesz-x https://dla zwykłego proxy - Node.js:
EPROTO ... wrong version numberw komunikacie o błędzie
Co powoduje SSL: WRONG_VERSION_NUMBER?
Najczęściej na początku:
https://przed adresem proxy z portem zwykłego HTTP proxy. Najczęstszy przypadek.- Skopiowane ustawienia od dostawcy, którego port proxy czeka na TLS.
https://na URL z portem 80, lubhttp://na porcie strony oczekującej TLS, poza proxy.- Zmienne środowiskowe takie jak
HTTPS_PROXY=https://...dziedziczone przez Twój kod.
Jak krok po kroku zdiagnozować SSL: WRONG_VERSION_NUMBER?
- Wypisz URL proxy, którego używa Twój kod i sprawdź schemat.
- Sprawdź zmienne środowiskowe
HTTPS_PROXYiALL_PROXY. - Uruchom poniższy test curl z
-x http://i potwierdź działanie. - Jeśli curl działa, a Twój kod nie, to kod lub środowisko używa jeszcze
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_URLJak naprawić SSL: WRONG_VERSION_NUMBER?
- Użyj
http://jako URL proxy w każdym kluczu:{"http": "http://...", "https": "http://..."}. - Zostaw włączoną weryfikację TLS. Naprawa to schemat, nie
verify=False. - Popraw zmienną środowiskową zamiast nadpisywać ją w skrypcie.
Czy warto ponawiać próbę po SSL: WRONG_VERSION_NUMBER?
Nie powtarzaj tego błędu: każda próba kończy się tak samo. To naprawa jednym znakiem w konfiguracji.
Jak SSL: WRONG_VERSION_NUMBER odnosi się do CrawlRelay?
HTTP port CrawlRelay to zwykły port HTTP proxy, który przesyła strony HTTPS przez tunele CONNECT. TLS jest end-to-end między klientem a witryną wewnątrz tunelu, więc brama nie potrzebuje adresu proxy https://.
Gateway: gw.crawlrelay.com, port 7777 (HTTP, HTTPS przez CONNECT) i port 7778 (SOCKS5). Format nazwy użytkownika: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Powiązane: Błąd weryfikacji certyfikatu SSL · Nie można połączyć się z proxy · Python guide.
SSL: WRONG_VERSION_NUMBER: pytania, które zadają deweloperzy
Czy mój ruch jest niezaszyfrowany, jeśli używam adresu proxy http://?
Nie dla stron HTTPS. Schemat http:// dotyczy tylko krótkiej wymiany CONNECT z proxy, w tym Twoich danych proxy. Potem klient prowadzi TLS bezpośrednio z witryną w tunelu, a proxy tylko przekazuje zaszyfrowane dane. Zwykłe strony http:// są niezaszyfrowane z proxy lub bez niego.
Dlaczego to się zaczęło po aktualizacji urllib3?
urllib3 2.x obsługuje HTTPS proxy, więc literalnie potraktuje URL proxy https:// i zacznie TLS z proxy. Starsze konfiguracje czasem działały przypadkowo z niewłaściwym schematem. Wpisz http:// dla zwykłych portów HTTP proxy, aby błąd zniknął.
Czy powinienem ustawić verify=False, aby rozwiązać błąd?
Nie. Wyłączanie sprawdzania certyfikatów nie naprawi złego schematu i naraża Cię na podsłuch przy każdym żądaniu. Popraw schemat URL proxy. W produkcji trzymaj weryfikację włączoną.
Inne błędy proxy w tym odniesieniu
Kody statusu HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Błędy w przeglądarce i kliencie
Błędy połączenia i TLS
Proxy rezydencjalne z dokumentacją opisującą przypadki błędów
CrawlRelay proxy rezydencjalne od 0,50 USD/GB, ruch, który nigdy nie wygasa.