php - curl 错误 (35) : error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 unrecognized name

标签 php ssl curl

我一直在使用以下代码块通过 cURL 从 HTTPS 网站收集数据。

$q = 'https://www.example.org/'; // for example
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $q);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

$json = curl_exec($ch);

cURL 显示以下错误

error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 unrecognized name

这可能与较旧的 OpenSSL 版本有关,但由于该网站位于共享主机中,因此目前无法更改服务器端设置。我所能做的就是更改 cURL 参数。

我在这里查看了https://www.ssllabs.com/ssltest/analyze.html查看该服务器的可用协议(protocol),发现 SSL3 和 SSL2 不可用,但 TLS 1.2、TLS 1.1 和 TLS 1.0 可用。通过谷歌搜索,我发现最好不要指定 SSL 版本,它实际上会自动协商要使用的最佳级别。虽然,我尝试在 CURLOPT_SSLVERSION 中设置 TLS 版本(如下所示),但还是出现了同样的错误。

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);

这几天我一直在尝试很多,但所有的尝试都是徒劳的。

我已尝试解释我所做的所有事情,但任何人请询问是否需要更多信息。任何帮助将不胜感激。

非常感谢

最佳答案

这可能是 cURL #1037 Bug http://sourceforge.net/p/curl/bugs/1037/

当您使用过时的 openssl 0.9.8 cURL 连接某些使用 openssl 1.0.x 的服务器并使用 SNI 时,似乎会发生这种情况。

关于php - curl 错误 (35) : error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 unrecognized name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29808030/

相关文章:

java - 禁用 HTTPS 连接的 SSL 证书验证?

c - SSL证书问题C

php - 将 id 从一个表格带到另一个表格并插入另一个表格

php - 在 PHP 中设置动态用户级别

php - Facebook 并行图像上传 - 并行是如何工作的

bash - 无法使用 curl : argument too long 将大文件发送到 elasticsearch

php - cURL 加载时间过长

php - php中的json对象没有被读取

JavaMail 在 osgi 包中失败

php - curl_close() : is not a valid cURL handle resource . .. 但为什么呢?