SSL页面上的PHP Curl错误

时间:2018-07-16 16:36:42

标签: php curl

我使用了一段时间的PHP脚本来检索特定SSL网页的内容突然开始失败,并引发以下错误(该页面始终是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参数而言,我尝试了Google提出的几种不同的解决方案,但到目前为止还没有运气。任何建议将不胜感激。

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

2 个答案:

答案 0 :(得分:1)

看起来该更新了。您尝试连接的站点已放弃对较旧的,不安全的协议(如SSL2,SSL3和TLS1)的支持,从而确保了其通信的安全。您可以在这里亲自查看:https://www.ssllabs.com/ssltest/analyze.html?d=www.oddschecker.com

您使用的是Internet标准较旧的OpenSSL版本,由于包含多个漏洞,因此被认为是非常不安全的。 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签名限制        RFC 5246中指示的TLS v1.2。        [史蒂夫·汉森] ...

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

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

答案 1 :(得分:0)

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

curl_setopt($ch, CURLOPT_SSLVERSION, 6);

有关其他值,请参见curl_setoptCURLOPT_SSLVERSION