2014-11-05 13 views
7

Z powodu numeru recent vulnerability discovered in SSLv3 wielu dostawców usług internetowych (np. PayPal, Facebook, Google) wyłącza to i chce, abyśmy zamiast tego używali TLS. Mam problem z ustaleniem, jak to zrobić.Aktualizacja żądania PHP cURL z SSLv3 na TLS ..?

Aktualnie używam poniższej funkcji do obsługi moich żądań cURL.

function CURLRequest($Request = "", $APIName = "", $APIOperation = "", $PrintHeaders = false) 
{ 
    $curl = curl_init(); 
      curl_setopt($curl, CURLOPT_VERBOSE, 1); 
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
      curl_setopt($curl, CURLOPT_TIMEOUT, 30); 
      curl_setopt($curl, CURLOPT_URL, $this->EndPointURL); 
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($curl, CURLOPT_POSTFIELDS, $Request); 

    if($this->APIMode == 'Certificate') 
    { 
     curl_setopt($curl, CURLOPT_SSLCERT, $this->PathToCertKeyPEM); 
    } 

    $Response = curl_exec($curl); 

    /* 
    * If a cURL error occurs, output it for review. 
    */ 
    if($this->Sandbox) 
    { 
     if(curl_error($curl)) 
     { 
      echo curl_error($curl).'<br /><br />'; 
     } 
    } 

    curl_close($curl); 
    return $Response; 
} 

przy próbie trafienia piaskownicy PayPal, chociaż, gdzie zostały one już wyłączone to, jak skończyć z cURL błędu: błędach: 14077410: rutyny SSL: SSL23_GET_SERVER_HELLO alert SSLv3 awarii handshake

Informacje, które znalazłem, to to, że muszę to zmienić, aby używać TLS zamiast SSL, a inne odpowiedzi, które widziałem, po prostu robią to, dodając opcję curl do mojej funkcji ...

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); 

Dodałem Tha t opcja, i nadal otrzymuję dokładnie taki sam wynik. Wszelkie informacje na temat tego, w jaki sposób mogę uzyskać tę funkcję, będą bardzo mile widziane. Dzięki!

+0

Czy masz starą wersję Curl? Patrząc na [tę odpowiedź] (http://stackoverflow.com/questions/26452755/php-curl-is-probably-using-sslv3-insted-of-tls-when-connecting-to-https) wydaje się co najmniej 7.19 ma problemy z TLS. – cOle2

+0

Tak, właśnie to zobaczyłem. Próbuję teraz dowiedzieć się, jak wyświetlić moją wersję curl. Nigdy wcześniej nie musiałem się z tym bałaganić. –

+0

Wygląda na to, że jestem w wersji 7.36.0, więc nie powinno to być moim problemem. –

Odpowiedz

2

Skopiowane z: SSL error can not change to TLS

Spróbuj dodać curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); do kodu.

To będzie działać, jeśli Curl jest OpenSSL libssl oparta ale nie jeśli NSS oparty.

+0

Tak, to chyba załatwiło sprawę. Czy powinniśmy jakoś je połączyć ... ?? –

+0

Preferuję twoje sformułowania, które są bardziej ogólne niż duplikat odpowiedzi, ale aby dać cezarowi to, co jest dla cesarza, ta odpowiedź nie jest moja ... –

+0

@philippelhardy, otrzymuję niepowodzenie uśpienia sslv3, mimo że ustawiłem 'CURLOPT_SSL_CIPHER_LIST' na TLSv1 –

3

Lepszym rozwiązaniem, dopóki system PayPal nie zaktualizuje podstawowego zestawu SDK, byłoby zastąpienie CURLOPT_SSL_CIPHER_LIST bezpośrednio w aplikacji. W ten sposób nie musisz bezpośrednio ingerować w pakiet sdk-core-php, a będziesz mógł go uaktualnić w przyszłości.

Można dodać coś takiego do logiki bootstrap lub płatność przetwarzania Twojej aplikacji:

PPHttpConfig::$DEFAULT_CURL_OPTS[CURLOPT_SSL_CIPHER_LIST] = 'TLSv1'; 

Wystarczy upewnić się, skomentować go dokładnie i pamiętaj, aby zabrać ją później, kiedy sprawa została załatana w rdzeniu .

+2

Czy możesz przejść do szczegółów gdzie (ścieżka/plik lub ustawienia) muszę dodać tę linię. Dzięki! – Raffael

+0

Hej Raffael, możesz go dodać wszędzie tam, gdzie na pewno zostaniesz wezwany na każdym pageload. Zależy to od twojej struktury, ale zazwyczaj będzie to jakiś "bootstrap"/plik konfiguracyjny, w którym możesz dodać tego rodzaju rzeczy. –

0

Właśnie rozwiązałem aktualizowanie biblioteki nss przez terminal.

0

Jeśli powyższe nie pomoże, sprawdź wersję OPENSSL. Prawdopodobnie z powodu wersji OPENSSL < = 0.9.8. Uaktualnienie do PHP7 pomaga, co jest związane z wyższą wersją OPENSSL.