Command-Line

如何修復 curl sslv3 警報握手失敗?

  • January 26, 2021

我正在嘗試通過以下方式捲曲 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到 my~/.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 

一些站點禁用了對 SSL 3.0 的支持(可能是由於許多漏洞利用/漏洞),因此可以通過-2/--sslv2-3/強制特定的 SSL 版本--sslv3-L如果請求的頁面已移動到其他位置,也值得一試。

就我而言,這是一個curl錯誤(在 OpenSSL 中發現),因此curl需要升級到最新版本(> 7.40)並且執行良好。

也可以看看:

引用自:https://unix.stackexchange.com/questions/192944