Bagaimana cara memperbaiki kegagalan handshake alert curl sslv3?

27

Saya mencoba meringkuk situs web HTTPS dengan cara berikut:

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

Namun gagal dengan kesalahan:

* 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

Menggunakan -k/ --insecureatau menambah insecureke saya ~/.curlrctidak ada bedanya.

Bagaimana cara saya mengabaikan atau memaksa sertifikat menggunakan curlbaris perintah?


Saat menggunakan wgettampaknya berfungsi dengan baik. Juga berfungsi saat pengujian dengan opensslseperti di bawah ini:

$ 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

Saya sudah:

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

Jawaban:

20

Beberapa situs menonaktifkan dukungan untuk SSL 3.0 (mungkin karena banyak eksploitasi / kerentanan), jadi mungkin untuk memaksa versi SSL tertentu dengan -2/ --sslv2atau -3/ --sslv3. Juga -Lpatut dicoba jika halaman yang diminta telah pindah ke lokasi yang berbeda.

Dalam kasus saya itu adalah curlbug ( ditemukan di OpenSSL ), jadi curlperlu ditingkatkan ke versi terbaru (> 7.40) dan itu berfungsi dengan baik.

Lihat juga:

kenorb
sumber
Ya, meningkatkan ikal memperbaiki masalah bagi saya. Terima kasih.
Simon East
Curl terbaru tidak suka RC4 cipher usang bahwa server lama mungkin masih menggunakan, jadi saya akhirnya menggunakan "--ciphers RC4" untuk secara khusus mengizinkannya
maxpolk
@SimonEast Dari versi mana ke versi mana Anda ugprade?
Olle Härstedt
5

Dimulai dengan Mavericks, Apple mengganti mesin TLS / SSL dari OpenSSL ke mesin Secure Transport mereka sendiri di Apple yang mendistribusikan biner CURL yang merusak penggunaan sertifikat klien. Gunakan biner CURL dari homebrew:

brew install curl
brew link curl --force
Arul Selvan
sumber
1
brew link curl --forcetidak lagi berfungsi, Anda harus memasukkan export "$(brew --prefix curl)/bin:$PATH".bash_profile sebagai gantinya.
Lars Nyström
1

Saya memiliki kesalahan ini ketika saya mengirim header host yang salah.

Saya sedang mengembangkan proxy dari http://127.0.0.1:12345 ke https://site.com:443 . jadi saya mengirim header permintaan apa adanya seperti yang datang dari browser dan ada host: 127.0.0.1: 12345 header. Saya menghapus header host yang berasal dari browser untuk menyelesaikan masalah.

Shimon Doodkin
sumber