Como corrigir falha de handshake de alerta curl sslv3?

27

Estou tentando criar um site HTTPS da seguinte maneira:

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

No entanto, falha com o erro:

* 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/ --insecureou adicionar insecureao meu ~/.curlrcnão faz nenhuma diferença.

Como ignoro ou forço o certificado usando a curllinha de comando?


Ao usar wgetparece funcionar bem. Também funciona ao testar com opensslo seguinte:

$ 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

Eu tenho:

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

Respostas:

20

Alguns sites desativam o suporte ao SSL 3.0 (possível por causa de muitas explorações / vulnerabilidades), portanto, é possível forçar uma versão SSL específica usando -2/ --sslv2ou -3/ --sslv3. Também -Lvale a pena tentar se a página solicitada foi movida para um local diferente.

No meu caso, era um curlbug ( encontrado no OpenSSL ), então curlprecisava ser atualizado para a versão mais recente (> 7.40) e funcionou bem.

Veja também:

kenorb
fonte
Sim, a atualização do curl corrigiu o problema para mim. Obrigado.
Simon East
A mais recente onda não gosta cifra RC4 ultrapassada que os servidores antigos ainda pode usar, então acabei usando "--ciphers RC4" para especificamente permitir isso
maxpolk
@SimonEast De qual versão para qual versão você melhorou?
Olle Härstedt 5/0318
5

Começando com o Mavericks, a Apple mudou o mecanismo TLS / SSL do OpenSSL para seu próprio mecanismo de Transporte Seguro no binário cURL distribuído pela Apple, que interrompe o uso do certificado do cliente. Use o binário cURL do homebrew:

brew install curl
brew link curl --force
Arul Selvan
fonte
11
brew link curl --forcenão funciona mais, você deve export "$(brew --prefix curl)/bin:$PATH"inserir seu .bash_profile.
Lars Nyström
1

Eu tive esse erro quando estava enviando um cabeçalho de host errado.

Eu estava desenvolvendo um proxy de http://127.0.0.1:12345 para https://site.com:443 . então eu estava enviando cabeçalhos de solicitação como estão do navegador e havia o cabeçalho host: 127.0.0.1: 12345. Excluí o cabeçalho do host que veio do navegador para resolver o problema.

Shimon Doodkin
fonte