2014-11-05 23 views
7

Do số recent vulnerability discovered in SSLv3, nhiều nhà cung cấp dịch vụ web (ví dụ: PayPal, Facebook, Google) đang vô hiệu hóa điều đó và muốn chúng tôi sử dụng TLS thay thế. Tôi đang gặp một chút rắc rối khi tìm ra cách để làm điều này.Cập nhật yêu cầu PHP cURL từ SSLv3 thành TLS ..?

Tôi hiện đang sử dụng chức năng sau để xử lý các yêu cầu cURL của mình.

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; 
} 

Khi tôi cố gắng đánh sandbox của PayPal, tuy nhiên, nơi họ đã bị vô hiệu hóa này, tôi kết thúc với một lỗi cURL: lỗi: 14.077.410: thói quen SSL: SSL23_GET_SERVER_HELLO: SSLv3 cảnh báo bắt tay thất bại

Thông tin mà tôi đã tìm thấy là tôi chỉ cần thay đổi điều này để sử dụng TLS thay vì SSL và các câu trả lời khác mà tôi đã thấy nói đơn giản chỉ bằng cách thêm tùy chọn curl vào chức năng của tôi ...

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); 

Tôi đã thêm tha t tùy chọn, mặc dù, và tôi vẫn nhận được kết quả chính xác tương tự. Bất kỳ thông tin về cách tôi có thể làm việc này sẽ được đánh giá cao. Cảm ơn!

+0

Bạn có đang sử dụng phiên bản Curl cũ không? Nhìn vào [câu trả lời này] (http://stackoverflow.com/questions/26452755/php-curl-is-probably-using-sslv3-insted-of-tls-when-connecting-to-https) có vẻ như ít nhất là 7.19 có vấn đề với TLS. – cOle2

+0

Vâng, tôi cũng thấy điều đó. Đang cố gắng tìm ra cách để xem phiên bản curl của tôi ngay bây giờ. Tôi chưa bao giờ phải gây rối với bất kỳ điều này trước đây. –

+0

Có vẻ như tôi đang ở trên 7.36.0, vì vậy đó không phải là vấn đề của tôi. –

Trả lời

2

sao chép từ: SSL error can not change to TLS

Cố gắng thêm curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); mã của bạn.

Điều này sẽ có tác dụng nếu bạn curl là OpenSSL libssl dựa nhưng không phải nếu NSS dựa.

+0

Có, điều đó dường như đã thực hiện thủ thuật. Chúng ta có nên hợp nhất những thứ này bằng cách nào đó không ?? –

+0

tôi thích từ ngữ của bạn nói chung hơn câu trả lời trùng lặp, nhưng để cho caesar những gì là để caesar câu trả lời này không phải là của tôi ... –

+0

@philippelhardy, tôi nhận được lỗi bắt tay sslv3 mặc dù tôi đã đặt 'CURLOPT_SSL_CIPHER_LIST' thành TLSv1 –

3

Một giải pháp tốt hơn cho đến khi Paypal cập nhật SDK lõi của nó sẽ ghi đè trực tiếp CURLOPT_SSL_CIPHER_LIST trong ứng dụng của bạn. Bằng cách này bạn không phải can thiệp vào gói sdk-core-php trực tiếp và bạn sẽ được tự do nâng cấp nó trong tương lai.

Bạn có thể thêm một cái gì đó như sau logic bootstrap hoặc thanh toán xử lý của ứng dụng của bạn:

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

Chỉ cần chắc chắn bạn nhận xét nó kỹ lưỡng và nhớ để lấy nó ra sau khi vấn đề đã được vá trong lõi .

+2

Bạn có thể vui lòng xem chi tiết ở đâu (đường dẫn/tệp hoặc cài đặt) tôi phải thêm dòng này. Cảm ơn! – Raffael

+0

Hey Raffael, bạn có thể thêm nó vào bất cứ nơi nào bạn chắc chắn sẽ được gọi trên mọi lần tải trang. Điều này phụ thuộc vào khung công tác của bạn nhưng thông thường nó sẽ có một số loại tệp tin "bootstrap"/cấu hình nơi bạn có thể thêm loại điều này. –

0

Tôi vừa giải quyết cập nhật thư viện nss qua thiết bị đầu cuối.

0

Nếu phần trên không có tác dụng, hãy kiểm tra phiên bản OPENSSL. Có khả năng là do phiên bản OPENSSL < = 0.9.8. Việc cập nhật lên PHP7 giúp, với phiên bản cao hơn của OPENSSL.

Các vấn đề liên quan