如何解决curl ssl v3警报握手失败?

时间:2016-01-03 15:40:28

标签: php ssl curl command-line openssl

我正在尝试在我的wamp服务器上的网站上使用curl。

然而它失败并出现错误:

error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

这是我的代码:

$url = sprintf( 'http://thepiratebay.se/search/%s/0/99/%d/', urlencode($keyword ), $category);

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cert/cacert.pem");

我尝试按site上的建议添加以下行:

curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'SSLv3');

但它给出了一个新错误:

error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

我的php版本:

5.4.16

我的卷曲版本:

7.30.0

我的openssl版本:

OpenSSL/0.9.8y

感谢。

1 个答案:

答案 0 :(得分:4)

根据report by SSLabs,此网站仅支持TLS_ECDHE_ECDSA *密码套件。

OpenSSL/0.9.8y

OpenSSL 0.9.8不支持任何ECDHE密码,因此客户端和服务器之间没有通用密码。这会导致SSL握手失败。没有解决方法,但您需要升级OpenSSL。请注意,这可能包括重新编译curl / PHP,以便他们使用较新版本的OpenSSL。或者您可能会获得更新版本的WAMP,其中可能包含较新版本的OpenSSL。