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

6

cURL停止工作了。我开始收到这个错误(直到几个小时前它都工作得很好)。

我正在使用PHP的cURL扩展。我找到了一些curl命令行的解决方案,但不幸的是我不理解它们:/并且我不知道如何将它们移动到PHP cURl标志中。

cURL配置:

$curl=curl_init();
curl_setopt($curl, CURLOPT_URL, "https://pln.bitcurex.com/data/ticker.json");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSLVERSION, 3);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_USERAGENT, $this->useragent);
curl_setopt($curl, CURLOPT_VERBOSE, 0);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $this->headers);

if(substr($url, 0, 5)=='https') curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);

if($this->ciastko)
{
    curl_setopt($curl, CURLOPT_COOKIEJAR, $this->ciastko);
    curl_setopt($curl, CURLOPT_COOKIEFILE, $this->ciastko);
}

if($this->post)
{
    if( is_array($this->post) && count($this->post) > 0 )
    {
        $postdata = http_build_query($this->post,'','&');
    }
    elseif( is_string($this->post) )
    {
        $postdata = $this->post;
    }
    else $postdata = '';

    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
}

$wynik=curl_exec($curl);

错误:

35: 错误:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

有什么办法可以修复这个问题吗?


相同的问题 https://github.com/coreos/etcd/issues/209 - Naing Lin Aung
3个回答

12

我刚刚将代码从

curl_setopt($curl, CURLOPT_SSLVERSION, 3);

改为了

curl_setopt($curl, CURLOPT_SSLVERSION, 4);


11

我知道这个问题有点过时了,但我为其他人找到了解决方案:

curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'SSLv3');

1
你能否解释一下这些设置是做什么用的,以及它们与在问题中提到的curl错误信息有什么关系? - hakre
这个不起作用,我遇到了同样的问题... 这似乎是发生在旧的Centos 5基础服务器上,使用旧版的OpenSSL 0.9.8。 - Carmageddon
4
由于POODLE漏洞的存在,许多网站现在正在禁用SSL 3.0。您应该切换到TLS,代码如下:curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1)。 - Roger Halliburton

0

输入值:

$params = Array
    (
        "username" => "XXXXXXXXXX",
        "password" => "XXXXXX"
    );

$path ='https://www.XXXXXXXX.com/xx/xxx/format/json/';

功能:

function curlpost($parameters, $path){
     $apiUrl = $path;
     $curl_handle = curl_init();
     curl_setopt($curl_handle, CURLOPT_URL, $apiUrl);
     curl_setopt($curl_handle, CURLOPT_BUFFERSIZE, 1024);
     curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
     curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, TRUE);
     curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, TRUE);
     curl_setopt($curl_handle, CURLOPT_POST, TRUE);
     curl_setopt($curl_handle, CURLOPT_PROXY, '');
     curl_setopt($curl_handle, CURLOPT_SSLVERSION, 4);
     curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $parameters);
     $response = curl_exec($curl_handle);

     $content = curl_exec( $curl_handle );
     $err     = curl_errno( $curl_handle );
     $errmsg  = curl_error( $curl_handle );
     $header  = curl_getinfo( $curl_handle );
     curl_close( $curl_handle );

     $header['errno']   = $err;
     $header['errmsg']  = $errmsg;
     $header['content'] = $content;
    curl_close($curl_handle);
     return $header;
 } 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接