2013-02-28 12 views
69

Vì một số lý do tôi không thể sử dụng CURL với HTTPS. Tất cả mọi thứ đã làm việc tốt cho đến khi tôi chạy nâng cấp các thư viện curl. Bây giờ tôi đang trải qua phản ứng này khi cố gắng thực hiện các yêu cầu CURL: (? Con đường quyền truy cập) Vấn đề với các CERT SSL CAPHP CURL CURLOPT_SSL_VERIFYPEER bỏ qua

gợi ý sau được đăng ở đây về các vấn đề có liên quan tôi đã cố gắng làm như sau:

  • Disable xác minh cho máy chủ và peer

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true); 
    
  • Enable CURLOPT_SSL_VERIFYPEER và trỏ đến CAcert.pem tải về 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-bó được cung cấp như giấy chứng nhận bó CA cho máy chủ tôi đang cố gắng để kết nối.

  • thiết lập ini Sửa php với curl.cainfo=cacert.pem (file trong cùng thư mục và truy cập bằng apache)

  • Đổi tên /etc/pki/nssdb để /etc/pki/nssdb.old

Unfortunatelly không có ở 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 cert CA (đường dẫn truy cập quyền?).

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

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

CẬP NHẬT

Sau khi cập nhật vào 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 đang làm tất cả dường như được làm việc tại một lần nữa !!!

+1

Bạn có nâng cấp thư viện Curl được biên dịch dựa trên một chồng SSL khác không (GnuTLS v.s OpenSSL, có lẽ)? – Bruno

+0

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

+0

Nếu bạn định 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

Trả lời

153

Theo tài liệu: để xác minh máy chủ hoặc chứng chỉ ngang hàng bạn cần chỉ định chứng chỉ thay thế 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.

Ngoài ra, hãy xem 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 phổ biến và cũng xác minh rằng nó phù hợ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); 
+2

Tắt xác minh SSL cũng loại bỏ tất cả bảo mật SSL. Thay vào đó, bạn nên sửa cấu hình PHP của mình. – Scopey

+1

@Scopey nhưng đôi khi bạn có thể cần nó trên môi trường phát triển địa phương với chứng chỉ tự ký. Vì vậy, có lẽ điều đó không có ý nghĩa đối với môi trường không công khai, nhưng như lời nhắc, nên luôn có một số cảnh báo trong nhật ký (ví dụ: 'Xác minh SSL bị vô hiệu hóa') – user3479125

1

Chúng tôi đã gặp sự cố tương tự trên máy CentOS7. Vô hiệu hóa VERIFYHOSTVERIFYPEER không giải quyết được sự cố, chúng tôi không còn lỗi cURL nữa nhưng phản hồi vẫn không hợp lệ. Thực hiện wget với cùng một liên kết như cURL đang 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 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, điều này dường như là một vấn đề về tham nhũng bộ nhớ. Khởi động lại VPS đã tải lại thư viện vào bộ nhớ một lần nữa và bây giờ nó hoạt động.Vì vậy, nếu giải pháp trên từ @clover không hoạt động, hãy thử khởi động lại máy của bạn.