php - CURL PHP 握手失败 SSL

标签 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) error:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

我不知道pb从哪里来。我在 Google 和 S/O 上查找了类似的错误消息,但没有找到任何解决方案。

最佳答案

您正在尝试使用 SSL 协议(protocol)的版本 3,但该协议(protocol)被服务器拒绝或不支持。 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。您还可以强制使用该协议(protocol)版本:

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);

关于php - CURL PHP 握手失败 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34787444/

相关文章:

php - 发送数据到php数据库

php - 在 php 上显示日历

php - Symfony2 打开 stream_socket_client()

windows - 我的盒子上的 Google SSL 证书有一个奇怪的问题

ssl - 如何验证导入到 keystore.jks 的自签名证书是否适用于 truststore.jks?

c++ - 编译 Curl Visual Studio - 未解析的外部符号

bash - 替代方案如何比使用 curl 更好 | sudo sh

php - Symfony 3 中不允许使用 405 方法

python - 使用python访问具有PKI安全性的站点

curl - 使 curl 将错误发送到 stderr 并将其他所有内容发送到 stdout