cURL 错误 (35):错误:14077458:SSL 例程:SSL23_GET_SERVER_HELLO:tlsv1 无法识别的名称

Posted

技术标签:

【中文标题】cURL 错误 (35):错误:14077458:SSL 例程:SSL23_GET_SERVER_HELLO:tlsv1 无法识别的名称【英文标题】:cURL Error (35): error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 unrecognized name 【发布时间】:2015-06-30 17:29:21 【问题描述】:

我一直在使用以下代码块通过 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 以查看该服务器的可用协议,发现 SSL3 和 SSL2 不可用,但 TLS 1.2、TLS 1.1 和 TLS 1.0 可用。在 Google 上搜索,我发现最好不要指定 SSL 版本,它实际上会自动协商最佳使用级别。虽然,我尝试在 CURLOPT_SSLVERSION 中设置 TLS 版本(如下),但出现同样的错误。

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);

过去几天我一直在尝试很多,但所有尝试都徒劳无功。

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

非常感谢

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于cURL 错误 (35):错误:14077458:SSL 例程:SSL23_GET_SERVER_HELLO:tlsv1 无法识别的名称的主要内容,如果未能解决你的问题,请参考以下文章

cURL 错误:[35] 不受支持的 SSL 协议版本

cURL SSL连接错误35与NSS错误-5961

curl: (35) 首次请求时连接出现未知 SSL 协议错误

curl:(35)错误:14077410:SSL例程:SSL23_GET_SERVER_HELLO:sslv3警报握手失败

curl: (35) SSL connect error的解决方法

curl 302错误了。