Hướng dẫn php curl with ssl certificate - php curl với chứng chỉ ssl

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, "https://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 = 'https://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.

Làm thế nào đặt chứng chỉ SSL trong Curl PHP?

Làm thế nào đặt chứng chỉ SSL trong Curl PHP?Thử đặt curl_setopt ($ CH, curlopt_ssl_verifypeer, false);và xóa curl_setopt ($ CH, curlopt_ssl_verifyhost, 2);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); and remove curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);

Curl có kiểm tra chứng chỉ SSL không?

Curl thực hiện xác thực chứng chỉ SSL ngang hàng theo mặc định.Điều này được thực hiện bằng cách sử dụng một cửa hàng chứng chỉ mà thư viện SSL có thể sử dụng để đảm bảo chứng chỉ máy chủ ngang hàng là hợp lệ.. This is done using a certificate store that the SSL library can use to make sure the peer's server certificate is valid.

Curl có hỗ trợ SSL không?

Curl có hỗ trợ tích hợp cho các kết nối vận chuyển an toàn (phiên bản an toàn hơn của nó được gọi là TLS).Khi bạn thực hiện yêu cầu CURL cho URL HTTPS, Curl sẽ tự động kiểm tra chứng chỉ SSL của URL đích đối với cửa hàng chứng chỉ CA cục bộ và cảnh báo nếu nó không hợp lệ, tự ký hoặc đã hết hạn. (its more secure version is called TLS). When you make a Curl request for an HTTPS URL, Curl automatically checks the target URL's SSL certificate against the local CA certificate store and warns if it is invalid, self-signed, or has expired.

Php Curl có an toàn không?

Curl hỗ trợ các phiên bản SSL V2, V3 và TLS 1.0 đến 1.3.Chỉ TLS 1.2 và TLS 1.3 được coi là an toàn ngày hôm nay.Trên thực tế, hầu hết các trình duyệt không còn chấp nhận kết nối với SSL và TLS 1.0 và TLS 1.1.Only TLS 1.2 and TLS 1.3 are considered secure today. In fact, most browsers no longer accept connections to SSL, and TLS 1.0 and TLS 1.1.