Curl: Vấn đề chứng chỉ SSL, xác minh rằng chứng chỉ CA là OK
07 tháng 4 năm 2006
Khi mở url bảo mật bằng Curl, bạn có thể gặp lỗi sau:
Sự cố chứng chỉ SSL, xác minh rằng chứng chỉ CA vẫn ổn
Tôi sẽ giải thích tại sao lỗi và những gì bạn nên làm về nó.
Cách dễ nhất để loại bỏ lỗi sẽ là thêm hai dòng sau vào tập lệnh của bạn. Giải pháp này đặt ra một rủi ro bảo mật tho.
//WARNING: this would prevent curl from detecting a 'man in the middle' attack
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
Hãy xem hai tham số này làm gì. Trích dẫn hướng dẫn.
CURLOPT_SSL_VERIFYHOST : 1 để kiểm tra sự tồn tại của một tên chung trong chứng chỉ ngang hàng SSL. 2 để kiểm tra sự tồn tại của một tên chung và cũng xác minh rằng nó phù hợp với tên máy chủ được cung cấp.
CURLOPT_SSL_VERIFYPEER : FALSE để ngăn chặn CURL xác minh chứng chỉ của người dùng. Chứng chỉ thay thế để xác minh chống lại có thể được chỉ định bằng tùy chọn CURLOPT_CAINFO hoặc thư mục chứng chỉ có thể được chỉ định bằng tùy chọn CURLOPT_CAPATH. CURLOPT_SSL_VERIFYHOST cũng có thể cần TRUE hoặc FALSE nếu CURLOPT_SSL_VERIFYPEER bị tắt (mặc định là 2). Đặt CURLOPT_SSL_VERIFYHOST thành 2 (Đây là giá trị mặc định) sẽ đảm bảo rằng chứng chỉ được xuất trình cho bạn có 'tên chung' khớp với URN mà bạn đang sử dụng để truy cập tài nguyên từ xa. Đây là một kiểm tra lành mạnh nhưng nó không đảm bảo chương trình của bạn không bị từ chối.
Nhập 'người đàn ông ở giữa'
Thay vào đó, chương trình của bạn có thể bị lừa khi nói chuyện với máy chủ khác. Điều này có thể đạt được thông qua một số cơ chế, như dns hoặc arp ngộ độc (Đây là một câu chuyện cho một ngày khác). Kẻ xâm nhập cũng có thể tự ký một chứng chỉ có cùng 'tên comon' mà chương trình của bạn đang mong đợi. Thông tin liên lạc vẫn sẽ được mã hóa nhưng bạn sẽ tiết lộ bí mật của mình cho kẻ mạo danh. Kiểu tấn công này được gọi là 'người ở giữa'
Đánh bại 'người đàn ông ở giữa'
Vâng, chúng tôi cần phải xác minh giấy chứng nhận được trình bày cho chúng tôi là tốt cho thực tế. Chúng tôi làm điều này bằng cách so sánh nó với một chứng chỉ mà chúng tôi tin tưởng * hợp lý.
Nếu tài nguyên từ xa được bảo vệ bởi một chứng chỉ được cấp bởi một trong những CA chính như Verisign, GeoTrust et al, bạn có thể so sánh một cách an toàn với gói chứng chỉ CA của Mozilla mà bạn có thể nhận được từ
http://curl.haxx.se/docs/caextract .html
Lưu tệp cacert.pem
ở đâu đó trong máy chủ của bạn và đặt các tùy chọn sau trong tập lệnh của bạn.
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");