Как исправить ошибку рукопожатия curl sslv3?

27

Я пытаюсь свернуть сайт HTTPS следующим образом:

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

Однако это не с ошибкой:

* 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

Использование -k/ --insecureили добавление insecureв мой ~/.curlrcне имеет никакого значения.

Как мне игнорировать или принудительно использовать сертификат с помощью curlкомандной строки?


При использовании wgetвроде работает нормально. Также работает при тестировании, 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

Я:

$ 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
источник

Ответы:

20

Некоторые сайты отключают поддержку SSL 3.0 (возможно, из-за множества эксплойтов / уязвимостей), поэтому можно принудительно установить конкретную версию SSL с помощью -2/ --sslv2или -3/ --sslv3. Также -Lстоит попробовать, если запрашиваемая страница была перемещена в другое место.

В моем случае это была curlошибка ( обнаружена в OpenSSL ), поэтому ее curlнужно было обновить до последней версии (> 7.40), и она работала нормально.

Смотрите также:

kenorb
источник
Да, обновление curl устранило проблему для меня. Спасибо.
Саймон Ист
Последнему curl не нравится устаревший шифр RC4, который старые серверы могут по-прежнему использовать, поэтому я специально использовал «--ciphers RC4»
maxpolk
@SimonEast С какой версии до какой версии вы угрожал?
Олле Харстедт
5

Начиная с Mavericks, Apple переключила механизм TLS / SSL с OpenSSL на собственный механизм безопасного транспорта в распределенном двоичном файле cURL от Apple, который нарушает использование клиентских сертификатов. Используйте двоичный файл cURL от homebrew:

brew install curl
brew link curl --force
Арул Сельван
источник
1
brew link curl --forceбольше не работает, export "$(brew --prefix curl)/bin:$PATH"вместо этого вы должны вставить свой .bash_profile.
Ларс Нистрем
1

У меня была эта ошибка, когда я отправлял неправильный заголовок хоста.

Я разрабатывал прокси с http://127.0.0.1:12345 по адресу https://site.com:443 . поэтому я отправлял заголовки запроса как есть, как пришло из браузера, и там был заголовок host: 127.0.0.1: 12345. Я удалил заголовок узла, который пришел из браузера, чтобы решить проблему.

Шимон Дудкин
источник