PHP Curl HTTPS SSL23_GET_SERVER_HELLO:tlsv1

时间:2017-05-12 10:26:07

标签: php ssl curl https

我无法通过curl访问https网站,而且我被卡住了。

可以在浏览器中打开网址并使用以下安全连接:

  

使用a加密并验证与此站点的连接   强协议(TLS 1.2),强大的密钥交换(ECDHE_RSA with   P-256)和强密码(AES_128_GCM)。

这里是我使用的php cUrl脚本:

$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$Org_Input); //$Org_Input
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3'); 
curl_setopt($curl, CURLOPT_AUTOREFERER, true); //updates the referrer
curl_setopt($curl, CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);  
curl_setopt($curl, CURLOPT_SSLVERSION, 6);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0);
$response= curl_exec($curl);
if (FALSE === $response) {
   echo "cUrl Error: " . curl_error($curl) . "<br><br>";
}

该脚本以前使用http url工作,如果网址被重定向到https,现在会导致问题。我相信它与curl_setopt有关($ curl,CURLOPT_SSLVERSION,6);

我尝试使用脚本

for($i=0;$i<=6;$i++) {
        //if($i==2) continue;
        $ch = curl_init($Org_Input);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSLVERSION, $i);
        if(curl_exec($ch) === false)
                echo $i.': ' . curl_error($ch) . "<br>";
        else
                echo $i.': works<br>';
        echo "\n";
        curl_close($ch);
}   

我收到以下错误消息:

0:错误:1407742E:SSL例程:SSL23_GET_SERVER_HELLO:tlsv1警报协议版本

1:错误:1409442E:SSL例程:SSL3_READ_BYTES:tlsv1警报协议版本

2:与www.example.com:443

相关的未知SSL协议错误

3:错误:14094410:SSL例程:SSL3_READ_BYTES:sslv3警报握手失败

4:错误:1407742E:SSL例程:SSL23_GET_SERVER_HELLO:tlsv1警报协议版本

5:错误:1407742E:SSL例程:SSL23_GET_SERVER_HELLO:tlsv1警报协议版本

6:错误:1407742E:SSL例程:SSL23_GET_SERVER_HELLO:tlsv1警报协议版本

由于网站正在使用&#34; TLS 1.2&#34;对于安全连接,我认为6是正确的值,因为它代表&#34; CURL_SSLVERSION_TLSv1_2&#34;

但是我仍然坚持错误响应:&#34; 1407742E:SSL例程:SSL23_GET_SERVER_HELLO:tlsv1警报协议版本&#34;

有人知道可能是什么问题吗?

cUrl版本:7.21.0 Open SSL版本:OpenSSL 0.9.8q 2010年12月2日 openssl版本号:9470239

1 个答案:

答案 0 :(得分:1)

  

OpenSSL 0.9.8q 2010年12月2日

这个不再支持的OpenSSL版本不支持现代协议(TLS 1.2)和现代密码。此外,可能是该站点需要TLS SNI扩展,旧软件可能不支持该扩展。

由于您访问的网站的网址未知,因此未知这些问题到底是什么问题。但我非常确定这是其中一个原因,OpenSSL,curl和它的PHP绑定的升级将解决这个问题。

  

由于网站正在使用&#34; TLS 1.2&#34;对于安全连接,我认为6是正确的值,因为它代表&#34; CURL_SSLVERSION_TLSv1_2&#34;

由于此版本的OpenSSL不支持TLS 1.2尝试使用TLS 1.2使用此设置无法解决问题,但可能会使问题变得更糟。尝试使用TLS 1.0,因为这是OpenSSL版本可以做的最多。