Tôi đang sử dụng Curl để gửi tệp XML qua HTTPS đến API RightMove - họ đã cung cấp cho tôi tất cả các chứng chỉ.
Tôi đang gặp lỗi:
Vấn đề chứng chỉ 60SSL: Không thể nhận được chứng chỉ phát hành cục bộ =
Tôi đã thử mọi thứ tôi đã tìm thấy trên mọi bài đăng StackOverflow khác và không có gì đang hoạt động, tôi đã thử tải xuống Cacert.pem cũ và thay đổi các tệp trong Php.ini - Ive đã cài đặt tệp thông tin cá nhân của tôi và đã sử dụng chứng chỉ trên trình duyệt và cục bộ Máy và không có gì là loại bỏ lỗi 60.
Đây là PHP của tôi:
Điều này đã khiến tôi đập đầu trong nhiều ngày, tôi sẽ rất biết ơn về bất kỳ sự trợ giúp nào.
$data = array['key'=>'value']; $ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, "//example.com/url/test.php"]; curl_setopt[$ch, CURLOPT_PORT , 443]; curl_setopt[$ch, CURLOPT_VERBOSE, 0]; curl_setopt[$ch, CURLOPT_HEADER, 0]; curl_setopt[$ch, CURLOPT_SSLCERT, getcwd[] . "/public_cert.pem"]; curl_setopt[$ch, CURLOPT_SSLKEY, getcwd[] . "/private.pem"]; curl_setopt[$ch, CURLOPT_CAINFO, "/etc/ssl/certs/ca-certificates.crt"]; curl_setopt[$ch, CURLOPT_POST, 1]; curl_setopt[$ch, CURLOPT_SSL_VERIFYPEER, 1]; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, 1]; curl_setopt[$ch, CURLOPT_POSTFIELDS, http_build_query[$data]]; $response = curl_exec[$ch]; $info =curl_errno[$ch]>0 ? array["curl_error_".curl_errno[$ch]=>curl_error[$ch]] : curl_getinfo[$ch]; print_r[$info]; curl_close[$ch]; echo $response;
Nếu bạn đang sử dụng các chức năng Curl Php, để kết nối với URL HTTPS, thì bạn có thể gặp phải lỗi sau:
Vấn đề chứng chỉ SSL: Không thể nhận được chứng chỉ phát hành cục bộ. & NBSP; [Mã lỗi Curl 60]
Đây là một lỗi phổ biến xảy ra bất cứ khi nào bạn cố gắng sử dụng các chức năng Curl để kết nối với trang web HTTPS.
Nói một cách đơn giản, điều đó có nghĩa là bạn chưa cấu hình Curl để kết nối với các trang web hỗ trợ SSL.
Sửa chữa nhanh chóng.
Nếu bạn không quan tâm đến bảo mật và đang tìm kiếm một sửa chữa nhanh, thì bạn chỉ có thể tắt các tùy chọn Curl sau:
- Curlopt_SSL_verifyhost: Tùy chọn này cho Curl biết rằng nó phải xác minh tên máy chủ trong chứng chỉ máy chủ.: This option tells cURL that it must verify the host name in the server cert.
- Curlopt_SSL_verifypeer: Tùy chọn này bảo Curl xác minh tính xác thực của chứng nhận SSL trên máy chủ.: This option tells cURL to verify the authenticity of the SSL cert on the server.
Vô hiệu hóa hai tùy chọn này vô hiệu hóa xác minh SSL.
Để vô hiệu hóa hai tùy chọn này, bạn có thể sử dụng chức năng Curl_SetOpt như vậy:curl_setopt function like so:
//The URL we are connecting to. $url = '//google.com'; //Initiate cURL. $ch = curl_init[$url]; //Disable CURLOPT_SSL_VERIFYHOST and CURLOPT_SSL_VERIFYPEER by //setting them to false. curl_setopt[$ch, CURLOPT_SSL_VERIFYHOST, false]; curl_setopt[$ch, CURLOPT_SSL_VERIFYPEER, false]; //Execute the request. curl_exec[$ch]; //Check for errors. if[curl_errno[$ch]]{ throw new Exception[curl_error[$ch]]; }
Mã PHP ở trên về cơ bản nói với Curl rằng chúng tôi không quan tâm nếu máy chủ có chứng chỉ SSL hợp lệ hay không. Chúng tôi muốn kết nối với nó dù sao.
Vấn đề với phương pháp này là nó không an toàn và nó khiến bạn mở ra các cuộc tấn công giữa các trung gian. Nói một cách đơn giản, điều này có nghĩa là kẻ tấn công có khả năng chặn dữ liệu mà bạn đang gửi trong các yêu cầu Curl của bạn.
Sử dụng chứng chỉ với các chức năng Curl PHP.
Để sử dụng chứng chỉ với các chức năng Curl PHP, bạn có thể tải xuống gói chứng chỉ Cacert.pem từ trang web Curl chính thức.cacert.pem certificate bundle from the official cURL website.
Khi bạn đã tải xuống tệp cacert.pem, bạn nên chuyển nó sang bất kỳ thư mục nào có ý nghĩa nhất đối với bạn và thiết lập của bạn.cacert.pem file, you should move it to whatever directory makes the most sense for you and your setup.
Ví dụ: trên Windows, tôi đã chuyển gói của mình sang C: \ Wamp \ cacert.pemC:\wamp\cacert.pem
Sau đó, bạn có thể chỉ cần nói với Curl nơi gói chứng chỉ của bạn được đặt bằng cách sử dụng chức năng & nbsp; curl_setopt:curl_setopt function:
//Tell cURL where our certificate bundle is located. $certificate = "C:\wamp\cacert.pem"; curl_setopt[$ch, CURLOPT_CAINFO, $certificate]; curl_setopt[$ch, CURLOPT_CAPATH, $certificate];
Điều này cho phép chúng tôi thực hiện một yêu cầu an toàn cho máy chủ và ngăn chặn mọi cuộc tấn công của người đàn ông.
Thêm chứng chỉ vào tệp Php.ini của bạn.
Nếu bạn không thích suy nghĩ về việc phải chỉ định vị trí của gói chứng chỉ trong mã PHP của mình, thì bạn có thể thêm thông tin đường dẫn của nó vào tệp php.ini của bạn như vậy:
curl.cainfo="C:\wamp\cacert.pem" openssl.cafile="C:\wamp\cacert.pem"
Khi bạn thêm các dòng trên vào tệp php.ini của mình, hãy đảm bảo rằng bạn tải lại quy trình Web Server / PHP để các thay đổi có hiệu lực.
Bật & nbsp; mod_ssl và & nbsp; php_openssl.dll.
Nếu bạn đang sử dụng Apache và PHP trên Windows, thì bạn có thể cần bật cả mod_ssl và & nbsp; php_openssl.dll.mod_ssl and php_openssl.dll.
Để bật MOD_SSL, bạn có thể thêm phần sau vào tệp cấu hình Apache của mình:mod_ssl, you can add the following to your Apache configuration file:
LoadModule ssl_module /usr/lib/httpd/modules/mod_ssl.so
Dòng cấu hình ở trên giả định rằng một tệp có tên mod_ssl.so tồn tại trong một thư mục Linux có tên là/usr/usr/lib/httpd/modules/.mod_ssl.so exists in a Linux directory called “/usr/lib/httpd/modules/”.
Trên Windows, thư mục này có thể giống như C C: \ Wamp \ bin \ Apache \ Apache2.4.9 \ Mô -đun \.C:\wamp\bin\apache\apache2.4.9\modules\“.
Bạn sẽ cần thay đổi dòng này để phù hợp với thiết lập Apache của riêng bạn.
Để bật Php_openssl.dll, bạn sẽ cần giải nén dòng sau trong tệp php.ini của mình:php_openssl.dll, you will need to uncomment the following line in your php.ini file:
extension=php_openssl.dll
Như mọi khi, bạn nên kiểm tra cấu hình của mình và sau đó tải lại máy chủ của bạn để có bất kỳ thay đổi nào có hiệu lực.