【问题标题】:PHP Curl Error on SSL PageSSL 页面上的 PHP 卷曲错误
【发布时间】:2018-12-24 06:33:16
【问题描述】:

我用了一段时间来检索特定 SSL 网页内容的 PHP 脚本突然开始失败,并抛出以下错误(该页面一直是 SSL 页面):

cUrl error (#35): error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 
alert protocol version
Verbose information:
* Adding handle: conn: 0x1da38f0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x1da38f0) send_pipe: 1, recv_pipe: 0
* About to connect() to www.oddschecker.com port 443 (#0)
*   Trying 35.201.89.239...
* Connected to www.oddschecker.com (35.201.89.239) port 443 (#0)
* error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
* Closing connection 0

有问题的网页:
https://www.oddschecker.com/golf/open-championship/2018-open-championship/winner

代码:

function get_data($url) 
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}

在设置不同的 curl_setopt 参数方面,我尝试了谷歌提出的一些不同的解决方案,但到目前为止还没有运气。任何建议将不胜感激。

本地 Windows PHP 安装
PHP 版本:5.3.28
卷曲版本:7.30.0
SSL 版本:OpenSSL/0.9.8y

【问题讨论】:

  • 您的服务器上安装了什么版本的 OpenSSL 和 PHP?您可能需要更新它们。
  • 感谢您的回复。它只是我 Windows 机器上的本地 PHP 安装。 PHP 版本 5.3.28 SSL 版本 OpenSSL/0.9.8y
  • 看起来您要访问的网站现在只允许 TLS 2 或更高版本。正如@BA_Webimax 所说,您可能需要更新。

标签: php curl


【解决方案1】:

您可以尝试通过添加以下内容将 TLS 设置为使用更现代的版本 (1.2):

curl_setopt($ch, CURLOPT_SSLVERSION, 6);

有关其他值,请参阅 curl_setopt 的 CURLOPT_SSLVERSION。

【讨论】:

  • 谢谢。但是,将其更改为该值时,错误输出没有变化。
【解决方案2】:

看来是时候更新了。您尝试连接的站点已通过放弃对 SSL2、SSL3 和 TLS1 等较旧的不安全协议的支持来保护他们的通信。您可以在这里亲自查看:https://www.ssllabs.com/ssltest/analyze.html?d=www.oddschecker.com

您使用的 OpenSSL 版本按照 Internet 标准是古老的,并且被认为非常不安全,因为它包含大量漏洞。 TLS 1.1 和 1.2 协议已添加到 OpenSSL v1.0.1。

1.0.0h 和 1.0.1 之间的更改 [2012 年 3 月 14 日] ... *) 添加 TLS v1.2 客户端支持客户端身份验证。保留缓存 握手记录的时间更长,因为我们不知道要使用的哈希算法 直到收到证书请求消息之后。 [史蒂夫汉森]

*) 初始 TLS v1.2 客户端支持。添加默认签名 算法 扩展包括我们支持的所有算法。解析新签名 客户端密钥交换中的格式。放宽一些 ECC 签名限制 RFC5246 中指出的 TLS v1.2。 [史蒂夫汉森] ...

https://www.openssl.org/news/cl102.txt

更新堆栈的其余部分也没有什么坏处。

【讨论】:

  • 感谢您的详细输入(以及上述其他输入)。我更新了我的 PHP 堆栈,现在一切都很好了。
猜你喜欢
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 2019-01-24
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
相关资源
最近更新 更多