2014-05-09 10 views
5

cURL przestał działać. Zaczynałem dostrzegać ten błąd (działało dobrze kilka godzin temu).PHP 35: błąd: 14094410: Procedury SSL: SSL3_READ_BYTES: błąd uzgadniania alertu sslv3

Używam rozszerzenia cURL dla PHP. Znalazłem rozwiązanie dla wiersza poleceń curl, ale niestety nie rozumiem ich:/i nie wiem jak przenieść je do flag cURL PHP.

cURL conf:

$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); 

błąd:

35: error: Procedury SSL:: 14094410 SSL3_READ_BYTES: Alert SSLv3 niewydolność handshake

jakieś pomysły jak to naprawić?

+0

sam problem https://github.com/coreos/etcd/issues/209 –

Odpowiedz

10

Wiem, że to nieco przestarzały problem, ale mam rozwiązanie dla innych:

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

może Pan wyjaśnić, co to ustawienie zrobić i jak to jest związane z zwijają komunikat o błędzie zapytał o to w pytaniu? – hakre

+0

To nie działa, a ja mam ten sam problem ... Wydaje się, że dzieje się to na starszych serwerach opartych na Centos 5, ze starszą wersją OpenSSL 0.9.8 – Carmageddon

+3

Z powodu luki POODLE wiele witryn wyłącza teraz SSL 3.0. Powinieneś przełączyć się na TLS, który wyglądałby tak: curl_setopt ($ ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1) –

10

po prostu zmienić z

curl_setopt($curl, CURLOPT_SSLVERSION, 3);

do

curl_setopt($curl, CURLOPT_SSLVERSION, 4);

0

wejścia wartości:

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

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

Funkcja:

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; 
} 
Powiązane problemy