Jak naprawić błąd uzgadniania curl sslv3?


27

Próbuję zawinąć witrynę HTTPS w następujący sposób:

$ curl -v https://thepiratebay.se/

Błąd kończy się jednak niepowodzeniem:

* About to connect() to thepiratebay.se port 443 (#0)
*   Trying 173.245.61.146...
* connected
* Connected to thepiratebay.se (173.245.61.146) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS alert, Server hello (2):
* error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
* Closing connection #0
curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

Używanie -k/ --insecurelub dodawanie insecuredo mojego ~/.curlrcnie robi żadnej różnicy.

Jak zignorować lub wymusić certyfikat za pomocą curlwiersza polecenia?


Podczas używania wgetwydaje się działać dobrze. Działa również podczas testowania, openssljak poniżej:

$ openssl s_client -connect thepiratebay.se:443
CONNECTED(00000003)
SSL handshake has read 2651 bytes and written 456 bytes
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES128-SHA

Ja:

$ curl --version
curl 7.28.1 (x86_64-apple-darwin10.8.0) libcurl/7.28.1 OpenSSL/0.9.8| zlib/1.2.5 libidn/1.17
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp 
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz 

Odpowiedzi:


20

Niektóre witryny wyłączają obsługę SSL 3.0 (możliwe z powodu wielu exploitów / słabych punktów), więc można wymusić określoną wersję SSL przez -2/ --sslv2lub -3/ --sslv3. Również -Lwarto spróbować, jeśli żądana strona została przeniesiona do innej lokalizacji.

W moim przypadku był to curlbłąd ( znaleziony w OpenSSL ), więc curlmusiałem zostać zaktualizowany do najnowszej wersji (> 7.40) i działał dobrze.

Zobacz też:


Tak, aktualizacja curl naprawiła dla mnie problem. Dzięki.
Simon East

Najnowszy curl nie lubi przestarzałego szyfru RC4, którego mogą używać stare serwery, więc ostatecznie użyłem „--ciphers RC4”, aby na to wyraźnie zezwolić
maxpolk

@SimonEast Z której wersji do której wersji pisałeś?
Olle Härstedt,

5

Począwszy od Mavericks, Apple przeniósł silnik TLS / SSL z OpenSSL na własny silnik Secure Transport w rozproszonym pliku binarnym cURL firmy Apple, który przerywa użycie certyfikatu klienta. Użyj pliku binarnego cURL z Homebrew:

brew install curl
brew link curl --force

1
brew link curl --forcejuż nie działa, musisz export "$(brew --prefix curl)/bin:$PATH"zamiast tego wpisać swój .bash_profile.
Lars Nyström

1

Miałem ten błąd, gdy wysyłałem niewłaściwy nagłówek hosta.

Tworzyłem proxy od http://127.0.0.1:12345 do https://site.com:443 . więc przesyłałem nagłówki żądań takimi, jakie są w przeglądarce, a nagłówek hosta: 127.0.0.1: 12345. Usunąłem nagłówek hosta pochodzący z przeglądarki, aby rozwiązać problem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.