curl: (35) błąd: 1408F10B: procedury SSL: ssl3_get_record: nieprawidłowy numer wersji

127

Kiedy próbuję połączyć się z dowolnym serwerem (np. Google.com) za pomocą curl (lub libcurl), pojawia się komunikat o błędzie:

curl: (35) błąd: 1408F10B: procedury SSL: ssl3_get_record: nieprawidłowy numer wersji

Gadatliwe wyjście:

$ curl www.google.com --verbose  
* Rebuilt URL to: www.google.com/  
* Uses proxy env variable no_proxy == 'localhost,127.0.0.1,localaddress,.localdomain.com'  
* Uses proxy env variable http_proxy == 'https://proxy.in.tum.de:8080'  
*   Trying 131.159.0.2...  
* TCP_NODELAY set  
* Connected to proxy.in.tum.de (131.159.0.2) port 8080 (#0)  
* successfully set certificate verify locations:  
*   CAfile: /etc/ssl/certs/ca-certificates.crt  
  CApath: none  
* TLSv1.3 (OUT), TLS handshake, Client hello (1):  
* error:1408F10B:SSL routines:ssl3_get_record:wrong version number  
* Closing connection 0  
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number'  

Z jakiegoś powodu curl wydaje się używać TLSv1.3, nawet jeśli wymuszę na nim używanie TLSv1.2 za pomocą polecenia --tlsv1.2 (nadal będzie drukować TLSv1.3 (OUT), ... "Używam najnowszej wersji zarówno Curl, jak i OpenSSL:

$ curl -V  
curl 7.61.0-DEV (x86_64-pc-linux-gnu) libcurl/7.61.0-DEV OpenSSL/1.1.1 zlib/1.2.8  
Release-Date: [unreleased]  
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp  
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy  

Myślę, że jest to problem związany z moją instalacją programów. Czy ktoś może mi wyjaśnić, co oznacza ten komunikat o błędzie?

Bernhard Jaeger
źródło

Odpowiedzi:

210
* Uses proxy env variable http_proxy == 'https://proxy.in.tum.de:8080'   
                                         ^^^^^

To https://jest złe, powinno być http://. Sam serwer proxy powinien być dostępny za pośrednictwem protokołu HTTP, a nie HTTPS, mimo że docelowy adres URL to HTTPS. Niemniej jednak proxy będzie prawidłowo obsługiwać połączenie HTTPS i zachowa szyfrowanie od końca do końca. Zobacz metodę HTTP CONNECT, aby dowiedzieć się, jak to się robi.

Steffen Ullrich
źródło
7
jeśli masz ten błąd w Dockerze, publiczne udostępnienie portu 443 rozwiązało ten problem
dr X
7

Prosta odpowiedź

Jeśli jesteś za serwerem proxy, ustaw proxy dla curl. Curl nie może połączyć się z serwerem, więc pokazuje nieprawidłowy numer wersji. Ustaw proxy, otwierając subl ~ / .curlrc lub użyj dowolnego innego edytora tekstu. Następnie dodaj następujący wiersz do pliku: proxy = proxyserver: proxyport Na przykład proxy = 10.8.0.1:8080

Jeśli nie korzystasz z serwera proxy, upewnij się, że plik curlrc nie zawiera ustawień proxy.

Sachit Yadav
źródło
7

Jeśli ktoś napotyka ten błąd przy użyciu Nginx, spróbuj dodać do konfiguracji serwera:

server {
    listen 443 ssl;
    ...
}

Problem wynika z tego, że Nginx obsługuje serwer HTTP klientowi oczekującemu protokołu HTTPS na dowolnym porcie, na którym nasłuchujesz. Określając sslw listendyrektywie, należy to wyjaśnić po stronie serwera.

Arcsector
źródło
2
thx, to doprowadziło mnie do rozwiązania, po prostu przegapiłem 'ssl' we wspomnianej linii konfiguracji nginx
normic
0

Prościej w jednej linii:

proxy = 192.168.2.1: 8080; curl -v example.com

na przykład. $ proxy = 192.168.2.1: 8080; curl -v example.com

xxxxxxxxx-ASUS: ~ $ proxy = 192.168.2.1: 8080; curl -v https: //google.com | head -c 15% Łącznie% Odebrane% Xferd Średnia prędkość Czas Czas Bieżące pobieranie Wysyłanie Łącznie spędzona prędkość w lewo 0 0 0 0 0 0 0 0 -: -: - -: -: - -: -: - 0

  • Próbuję 172.217.163.46:443 ...
  • Zestaw TCP_NODELAY
  • Połączono z google.com (172.217.163.46), port 443 (# 0)
  • ALPN, oferujący h2
  • ALPN, oferujący http / 1.1
  • pomyślnie ustaw certyfikat zweryfikuj lokalizacje:
  • Plik CA: /etc/ssl/certs/ca-certificates.crt Ścieżka CA: / etc / ssl / certs} [5 bajtów danych]
  • TLSv1.3 (OUT), uzgadnianie TLS, Client hello (1):} [512 bajtów danych]
Biddut Mitra
źródło