Hướng dẫn dùng tls1_2 openssl trong PHP

Nó là đơn giản và dễ dàng.

$client = new Client();
$guzzle = new GuzzleClient('https://www.yourweb.com', array(
    'curl.options' => array(
        CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2
    )
));
$client->setClient($guzzle);
...

Trong Guzzle 3.0+ (cập nhật theo nhận xét của @limos):

'curl' => array(
    CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2
)

CURLOPT_SSLVERSIONBạn có thể tìm thấy các tùy chọn khả thi tại trang cURL chính thức: http://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html

--- CẬP NHẬT (dựa trên các nhận xét) ---

Việc chọn phiên bản giao thức SSL thích hợp không chỉ liên quan đến CURLOPT_SSLVERSIONcài đặt mà còn liên quan đến nhiều cài đặt cURL hơn. Kết quả mong muốn và quan trọng được gọi là "Bí mật chuyển tiếp tối đa". Điều này không chỉ hợp lệ cho cURL!

Bạn không thể sử dụng nhiều CURLOPT_SSLVERSIONtham số (ít nhất, tôi không tìm thấy tùy chọn như vậy trong tài liệu Guzzle). Khi bạn xác định CURLOPT_SSLVERSION, cURL sẽ cố gắng sử dụng phiên bản SSL đó - từ tài liệu cURL (liên kết được cung cấp ở trên về CURLOPT_SSLVERSION) - "Chuyển tham số long as để kiểm soát phiên bản SSL / TLS sẽ cố gắng sử dụng."

Bạn có thể xác định nhiều mật mã bảo mật, nhưng chỉ có một tham số phiên bản SSL. Tôi sẽ không sử dụng bất kỳ thứ gì sớm hơn TLS 1.1. Bất kỳ phiên bản SSL nào trước đó đều dễ bị tấn công. Phiên bản TLS 1.1 cũng dễ bị tấn công, nhưng sau đó bạn có thể gặp phải các vấn đề tương thích với máy khách ở phiên bản 1.2, nếu bạn đi theo lộ trình đó. Bảo mật duy nhất (hiện tại, cho đến khi họ phát hiện ra một số lỗ hổng) là TLS 1.2.

Nếu bảo mật là ưu tiên hàng đầu, hãy sử dụng phiên bản TLS cao nhất hiện có (TLS1.2). Tính tương thích của máy khách không phải là vấn đề của bạn khi có trách nhiệm bảo mật của nhà cung cấp dịch vụ.

Nếu bảo mật là quan trọng, đây là các tùy chọn cURL khác để xem xét:

  • CURLOPT_SSL_VERIFYHOST
  • CURLOPT_SSL_VERIFYPEER
  • CURLOPT_CAINFO(cURL cung cấp tại trang web CA CERTs của họ )
  • CURLOPT_SSL_CIPHER_LIST

Thiết lập thích hợp CURLOPT_SSL_VERIFYHOSTCURLOPT_SSL_VERIFYPEERsẽ ngăn chặn các cuộc tấn công MITM.

CURLOPT_CAINFO- Sửa lỗi: 35 - Lỗi giao thức SSL không xác định trong các kết nối. Cải thiện bí mật phía trước tối đa.

Dưới đây là danh sách với các mật mã cURL ( CURLOPT_SSL_CIPHER_LIST) để xem xét, điều này sẽ cải thiện bí mật chuyển tiếp tối đa:

'DHE-RSA-AES256-SHA',
'DHE-DSS-AES256-SHA',
'AES256-SHA',
'ADH-AES256-SHA',
'KRB5-DES-CBC3-SHA',
'EDH-RSA-DES-CBC3-SHA',
'EDH-DSS-DES-CBC3-SHA',
'DHE-RSA-AES128-SHA',
'DHE-DSS-AES128-SHA',
'ADH-AES128-SHA',
'AES128-SHA',
'KRB5-DES-CBC-SHA',
'EDH-RSA-DES-CBC-SHA',
'EDH-DSS-DES-CBC-SHA:DES-CBC-SHA',
'EXP-KRB5-DES-CBC-SHA',
'EXP-EDH-RSA-DES-CBC-SHA',
'EXP-EDH-DSS-DES-CBC-SHA',
'EXP-DES-CBC-SHA'

Các mật mã này đã được kiểm tra dựa trên danh sách Phòng thí nghiệm SSL Qualys mạnh (2014) và các mật mã yếu đã bị xóa. Hãy thêm / bớt bất kỳ mật mã nào.

Nếu bạn vẫn muốn theo đuổi nhiều CURLOPT_SSLVERSIONlựa chọn, tôi sẽ viết một kịch bản để làm như vậy (tôi không nghĩ đó là một cách thực hành tốt hoặc cần thiết). Tuy nhiên, nếu bạn quyết định theo đuổi chức năng đó vì bất kỳ lý do gì, hãy viết một số mã sẽ cố gắng sử dụng mã hóa SSL mạnh nhất có thể và sau đó dự phòng cho phiên bản tiếp theo, nếu nó không kết nối được.

  1. Trước khi bạn đưa ra quyết định, hãy xem các dự án của Qualys SSL Labs về bảo mật.
  2. Hãy xem bài viết này của SSL Labs về bí mật chuyển tiếp hoàn hảo và các phương pháp hay nhất.
  3. Kiểm tra ứng dụng khách của bạn (trình duyệt web) để tìm bất kỳ lỗ hổng nào bằng công cụ web của SSL Labs . Điều này sẽ cung cấp cho bạn ý tưởng về những gì cần xem xét và những gì cần cải thiện và bảo mật trên máy chủ và ứng dụng của bạn.
  4. Kiểm tra trang web / dịch vụ web của bạn bằng công cụ SSL SSL Labs của Qualys .

Các lỗ hổng và cuộc tấn công: Longjam, FREAK, POODLE, bạn đặt tên cho nó! Ai biết những cuộc tấn công hoặc lỗ hổng bảo mật nào khác chưa được phát hiện? Đúng! Tất cả chúng đều ảnh hưởng đến lựa chọn kết nối SSL / TLS của bạn.

Bạn không có quyền kiểm soát máy khách (trừ khi bạn phát triển nó), nhưng bạn có quyền kiểm soát máy chủ và các cuộc đàm phán giữa máy chủ và máy khách.

Bất kể bạn xây dựng ứng dụng nào, bạn nên xem xét các phương pháp hay nhất, tùy thuộc vào nhu cầu của bạn và tùy từng trường hợp, bạn nên quyết định các tùy chọn sau:

  1. Bảo vệ
  2. Khả năng tương thích
  3. Khả năng bảo trì
  4. Sự phức tạp

Nếu bảo mật quan trọng như vậy, hãy sử dụng TLS1.1 ở mức tối thiểu. Nhìn vào danh sách mật mã, tôi sẽ không bỏ qua phần đó.

Đây cũng là một hướng dẫn OWASP hay để tạo một lớp bảo mật xung quanh ứng dụng của bạn.

OWASP và Qualys SSL Labs là những tài nguyên tuyệt vời để bắt đầu. Tôi thậm chí sẽ thực hiện một số nghiên cứu về cURL và OpenSSL để làm quen với các điểm yếu, các tùy chọn bảo mật có thể có và các phương pháp hay nhất.

Có những điểm an ninh, mà tôi không đề cập đến và bị thiếu, nhưng chúng tôi không thể bao gồm tất cả mọi thứ. Đây chỉ là đỉnh của tảng băng trôi. Bất cứ điều gì không được đề cập ở đây là để bạn nghiên cứu.

Chúc may mắn!

Tôi sẽ có mặt để trả lời bất kỳ câu hỏi nào, nếu tôi có thể.

13 hữu ích 5 bình luận chia sẻ