CURL PHP握手失败SSL

时间:2016-01-14 10:40:04

标签: php ssl curl handshake sslhandshakeexception

我有以下代码:

<?php
$cookie_file_path = "cookie.txt"; // 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'theurl');
curl_setopt($ch, CURLOPT_POSTFIELDS,'blocPnr_textField_labelNom='.urlencode('www').'&blocPnr_textField_labelPnr='.urlencode('xxx').'&blocPnr_valider=Submit');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSLVERSION,3); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
curl_setopt($ch, CURLOPT_REFERER, "theurl");
$page = curl_exec($ch);
var_dump($page);
echo 'error:' . curl_error($ch);
?>

它给了我以下错误:

  

bool(false)错误:错误:14094410:SSL例程:SSL3_READ_BYTES:sslv3警报握手失败

我无法弄清楚pb的来源。我在Google和S / O上查找了类似的错误消息,但没有找到任何解决方案。

1 个答案:

答案 0 :(得分:1)

您尝试使用服务器拒绝或不支持的SSL协议版本3。 The POODLE attack推动了许多系统管理员放弃对SSLv3的支持,其使用不再那么普遍(绝对不推荐)。

当你有SSL握手错误时,try different versions of SSL/TLS直到一个工作(最好是最安全的)。如果您有疑问,请在大多数情况下使用CURL_SSLVERSION_DEFAULT

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_DEFAULT);

似乎 formulaire.sncf.com 支持TLSv1.0。您也可以强制使用该协议版本:

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);