desenv-web-rp.com

Como corrigir falha de handshake de alerta curl sslv3?

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

Usando -k/--insecure ou adicionando insecure ao meu ~/.curlrc não faz nenhuma diferença.

Como ignoro ou forço o certificado usando curl linha de comando?


Ao usar wget parece funcionar bem. Também funciona ao testar com openssl como abaixo:

$ 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 
28
kenorb

Alguns sites desabilitam 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 por -2/--sslv2 ou -3/--sslv3. Além disso -L vale a pena tentar se a página solicitada foi movida para um local diferente.

No meu caso, foi um erro de curl ( encontrado no OpenSSL ), então curl precisava ser atualizado para a versão mais recente (> 7.40) e funcionou bem.

Veja também:

21
kenorb

Começando com o Mavericks, Apple alternou o mecanismo TLS/SSL do OpenSSL para seu próprio mecanismo de Transporte Seguro em Apple binário cURL distribuído da Apple $ === que interrompe o uso do certificado do cliente. binário cURL do homebrew:

brew install curl
brew link curl --force
6
Arul Selvan

Eu tive esse erro ao enviar um cabeçalho de host errado.

Eu estava desenvolvendo um proxy de http://127.0.0.1:12345 até https://site.com:44 . 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 Host que veio do navegador para resolver o problema.

1
Shimon Doodkin