Wie zu beheben curl sslv3 alert handshake Fehler?

27

Ich versuche, die HTTPS-Website auf folgende Weise zu locken:

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

Es schlägt jedoch mit dem Fehler fehl:

* 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

Die Verwendung von -k/ --insecureoder das Hinzufügen insecurezu my ~/.curlrcmacht keinen Unterschied.

Wie kann ich das Zertifikat über die curlBefehlszeile ignorieren oder erzwingen ?


Bei der Verwendung wgetscheint es gut zu funktionieren. Funktioniert auch beim Testen mit openssl:

$ 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

Ich habe:

$ 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 
Kenorb
quelle

Antworten:

20

Einige Sites deaktivieren die Unterstützung für SSL 3.0 (aufgrund zahlreicher Exploits / Schwachstellen möglich). Daher ist es möglich, eine bestimmte SSL-Version entweder mit -2/ --sslv2oder -3/ zu erzwingen --sslv3. Es -List auch einen Versuch wert, wenn die angeforderte Seite an einen anderen Ort verschoben wurde.

In meinem Fall handelte es sich um einen curlFehler ( in OpenSSL gefunden ), daher curlmusste ein Upgrade auf die neueste Version (> 7.40) durchgeführt werden, und es funktionierte einwandfrei.

Siehe auch:

Kenorb
quelle
Ja, ein Upgrade von Curl hat das Problem für mich behoben. Vielen Dank.
Simon East
Die neueste Curl-Version mag veraltete RC4-Verschlüsselungen nicht, die von alten Servern möglicherweise noch verwendet werden. Daher habe ich letztendlich "--ciphers RC4" verwendet, um dies ausdrücklich zuzulassen
maxpolk
@SimonEast Von welcher Version auf welche Version hast du ugprade?
Olle Härstedt
5

Beginnend mit Mavericks hat Apple die TLS / SSL-Engine von OpenSSL auf ihre eigene Secure Transport-Engine in der von Apple bereitgestellten cURL-Binärdatei umgestellt, wodurch die Verwendung von Client-Zertifikaten beeinträchtigt wird. Verwenden Sie die cURL-Binärdatei von Homebrew:

brew install curl
brew link curl --force
Arul Selvan
quelle
1
brew link curl --forcefunktioniert nicht mehr, Sie müssen export "$(brew --prefix curl)/bin:$PATH"stattdessen Ihr .bash_profile eingeben.
Lars Nyström
1

Ich hatte diesen Fehler, als ich einen falschen Host-Header gesendet habe.

Ich habe einen Proxy von http://127.0.0.1:12345 bis https://site.com:443 entwickelt . Daher habe ich die Anforderungsheader so gesendet, wie sie vom Browser stammen, und es gab den Host: 127.0.0.1: 12345-Header. Ich habe den Host-Header aus dem Browser gelöscht, um das Problem zu beheben.

Shimon Doodkin
quelle