PHP CURL CURLOPT_SSL_VERIFYPEER bị bỏ qua


117

Vì một số lý do, tôi không thể sử dụng CURL với HTTPS. Mọi thứ vẫn hoạt động tốt cho đến khi tôi chạy nâng cấp thư viện curl. Bây giờ tôi gặp phải phản hồi này khi cố gắng thực hiện các yêu cầu CURL: Sự cố với chứng chỉ SSL CA (đường dẫn? Quyền truy cập?)

Theo các đề xuất được đăng ở đây về các vấn đề liên quan, tôi đã cố gắng thực hiện như sau:

  • Tắt xác minh cho máy chủ và máy chủ ngang hàng

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
  • Bật CURLOPT_SSL_VERIFYPEERvà trỏ đến cacert.pem được tải xuống từ http://curl.haxx.se/docs/caextract.html

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
  • Tôi cũng đã cố gắng làm điều tương tự với positiveSSL.ca-pack được cung cấp dưới dạng chứng chỉ CA gói cho máy chủ mà tôi đang cố gắng kết nối.

  • Chỉnh sửa cài đặt php ini với curl.cainfo=cacert.pem(tệp trong cùng thư mục và có thể truy cập bằng apache)

  • Đổi tên /etc/pki/nssdbthành/etc/pki/nssdb.old

Rất tiếc, không có cách nào ở trên có thể giải quyết vấn đề của tôi và tôi liên tục gặp sự cố với thông báo SSL CA cert (đường dẫn? Quyền truy cập?).

Và tôi không cần xác minh này ngay từ đầu (tôi biết về các vấn đề bảo mật).

Có ai có bất kỳ đề xuất nào khác không?

CẬP NHẬT

Sau khi cập nhật lên các thư viện mới nhất và khởi động lại toàn bộ hộp, không chỉ apache mà tôi đã làm, tất cả dường như hiện đang hoạt động trở lại !!!


1
Bạn có nâng cấp thư viện Curl được biên dịch dựa trên một ngăn xếp SSL khác không (có lẽ là GnuTLS so với OpenSSL)?
Bruno

Tôi sẽ không nghĩ như vậy. Hệ thống là Fedora 16 và nó thực sự là trường hợp cập nhật yum. Điều khó chịu nhất là tôi không cần / muốn toàn bộ xác thực này và tôi dường như không thể vô hiệu hóa nó một cách đơn giản.
Greg

Nếu bạn đang muốn sử dụng HTTPS để bảo mật, bạn sẽ luôn muốn có quy trình xác thực này.
Bruno

Tôi nhận thức được điều đó, tuy nhiên trường hợp sử dụng của tôi ở đây khiến nó trở nên hơi thừa. Ngoài ra, tôi đã cập nhật curl lên phiên bản mới nhất hiện có và php lên 5.4. Bây giờ, thông báo lỗi đã biến mất, nhưng tôi cũng không nhận được bất kỳ cotnent nào từ cuộn tròn :)
Greg

Ha, bây giờ tôi nhận được một nơi nào đó hàm curl_errno báo cáo trạng thái 77 mà theo hướng dẫn sử dụng là CURLE_SSL_CACERT_BADFILE.
Greg

Câu trả lời:


240

Theo tài liệu: để xác minh máy chủ lưu trữ hoặc chứng chỉ ngang hàng, bạn cần chỉ định các chứng chỉ thay thế với CURLOPT_CAINFOtùy chọn hoặc một thư mục chứng chỉ có thể được chỉ định với CURLOPT_CAPATHtùy chọn.

Cũng nhìn vào CURLOPT_SSL_VERIFYHOST:

  • 1 để kiểm tra sự tồn tại của 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 thông thường và cũng xác minh rằng nó khớp với tên máy chủ được cung cấp.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

5
Dù sao thì việc tắt xác minh SSL cũng sẽ loại bỏ tất cả tính bảo mật của SSL. Thay vào đó, bạn nên sửa cấu hình PHP của mình.
Scopey

7
@Scopey nhưng đôi khi bạn có thể cần nó trên các môi trường phát triển cục bộ với các chứng chỉ tự ký. Vì vậy, có lẽ nó làm cho không có ý nghĩa về môi trường ngoài công lập, nhưng như lời nhắc nhở nó phải lúc nào cũng tốt hơn để có một số cảnh báo trong nhật ký (ví dụ SSL verification disabled)
Ivan Borshchov

2

Chúng tôi gặp sự cố tương tự trên máy CentOS7. Việc vô hiệu hóa VERIFYHOST VERIFYPEERkhông giải quyết được sự cố, chúng tôi không gặp lỗi cURL nữa nhưng phản hồi vẫn không hợp lệ. Thực hiện wgetđến cùng một liên kết như cURL đã được thực hiện cũng dẫn đến lỗi chứng chỉ.

-> Giải pháp của chúng tôi cũng là khởi động lại VPS, điều này đã giải quyết được nó và chúng tôi có thể hoàn thành yêu cầu một lần nữa.

Đối với chúng tôi, đây dường như là một vấn đề hỏng bộ nhớ. Khởi động lại VPS đã tải lại libary trong bộ nhớ và bây giờ nó hoạt động. Vì vậy, nếu giải pháp trên từ @cloverkhông hoạt động, hãy thử khởi động lại máy của bạn.


Đảm bảo rằng nó không bị gián đoạn. Tôi đã gặp sự cố với paypal và xác minh ngang hàng, đôi khi nó hoạt động, đôi khi nó không. Nó dường như ngẫu nhiên. Thiết lập rõ ràng đường dẫn cafile và cho curl biết nơi nó đã được giải quyết vấn đề.
Neil Davis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.