¿Cómo reparar el fallo curl sslv3 alerta apretón de manos?

27

Estoy tratando de curlizar el sitio web HTTPS de la siguiente manera:

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

Sin embargo, falla con el error:

* 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

Usar -k/ --insecureo agregar insecurea mi ~/.curlrcno hace ninguna diferencia.

¿Cómo ignoro o fuerzo el certificado usando la curllínea de comando?


Cuando se usa wgetparece funcionar bien. También funciona cuando se prueba con openssllo siguiente:

$ 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

He:

$ 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
fuente

Respuestas:

20

Algunos sitios deshabilitan la compatibilidad con SSL 3.0 (posible debido a muchas vulnerabilidades / vulnerabilidades), por lo que es posible forzar una versión específica de SSL mediante -2/ --sslv2o -3/ --sslv3. También -Lvale la pena intentarlo si la página solicitada se ha movido a una ubicación diferente.

En mi caso, era un curlerror ( encontrado en OpenSSL ), por lo que curlnecesitaba actualizarse a la última versión (> 7.40) y funcionó bien.

Ver también:

kenorb
fuente
Sí, actualizar curl solucionó el problema para mí. Gracias.
Simon East
El último rizo no le gusta el cifrado anticuado RC4 que los servidores antiguos todavía podrían usar, así que terminé usando "--ciphers RC4" para permitirlo específicamente
maxpolk
@SimonEast ¿De qué versión a qué versión te pasaste?
Olle Härstedt
5

Comenzando con Mavericks, Apple cambió el motor TLS / SSL de OpenSSL a su propio motor de transporte seguro en binario cURL distribuido por Apple que interrumpe el uso del certificado del cliente. Utilice el binario cURL de homebrew:

brew install curl
brew link curl --force
Arul Selvan
fuente
1
brew link curl --forceya no funciona, debes poner export "$(brew --prefix curl)/bin:$PATH"tu .bash_profile en su lugar.
Lars Nyström
1

Tuve este error cuando estaba enviando un encabezado de host incorrecto.

Estaba desarrollando un proxy de http://127.0.0.1:12345 a https://site.com:443 . así que estaba enviando encabezados de solicitud tal como estaban desde el navegador y había host: 127.0.0.1: encabezado 12345. Eliminé el encabezado del host que vino del navegador para resolver el problema.

Shimon Doodkin
fuente