如何修复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 

Answers:


20

一些站点禁用了对SSL 3.0的支持(可能由于许多漏洞利用/漏洞),因此可以通过-2/ --sslv2-3/ 强制使用特定的SSL版本--sslv3-L如果请求的页面已移至其他位置,也值得尝试。

就我而言,这是一个curl错误(在OpenSSL中找到),因此curl需要升级到最新版本(> 7.40),并且可以正常工作。

也可以看看:


是的,升级curl对我来说解决了这个问题。谢谢。
西蒙东

最新的curl不喜欢旧服务器可能仍在使用的过时的RC4密码,因此我最终使用了“ --ciphers RC4”来专门允许使用它
maxpolk '16

@SimonEast您从哪个版本升级到哪个版本?
OlleHärstedt'3

5

从Mavericks开始,Apple使用Apple分布式cURL二进制文件将TLS / SSL引擎从OpenSSL切换到他们自己的安全传输引擎,这破坏了客户端证书的使用。使用自制的cURL二进制文件:

brew install curl
brew link curl --force

1
brew link curl --force不再起作用,您必须export "$(brew --prefix curl)/bin:$PATH"改为输入.bash_profile。
拉尔斯·尼斯特罗姆

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.