Perilaku fungsi-fungsi ini dipengaruhi oleh pengaturan di php. ini
Opsi Konfigurasi cURLNameDefaultChangeableChangelogNULLPHP_INI_SYSTEMUntuk perincian lebih lanjut dan definisi mode PHP_INI_*, lihat Di mana pengaturan konfigurasi dapat diaturBerikut penjelasan singkat tentang direktif konfigurasi
curl.cainfo stringNilai default untuk opsi CURLOPT_CAINFO. Ini diperlukan untuk menjadi jalur absolut
I was editing wrong php.ini file in last comment._
Even though loaded configuration path was showing as "D:\wamp64\bin\apache\apache2.4.37\bin\php.ini" inside phpinfo() of WAMP Server, It was actually loading "D:\wamp64\bin\apache\apache2.4.37\bin\phpForApache.ini"
Once I set both the variables inside phpForApache.ini, details are displayed in phpinfo() and error has gone without extra coding line.
cURL error 60: SSL certificate problem: unable to get local issuer certificate
This local development error comes when curl.cainfo variable is not set correctly.
I faced this issue in PHP Version 7.3.1
In order to fix the error, I downloaded cacert.pem from //curl.haxx.se/docs/caextract.html
Set the following paths in php.ini
curl.cainfo="D:\wamp64\bin\php\php7.3.1\extras\ssl\cacert.pem"
openssl.cafile="D:\wamp64\bin\php\php7.3.1\extras\ssl\cacert.pem"
Even after adding the paths and restart Apache, Inside phpinfo(), both the paths were showing blank.
The error will go only if we set via php code of the project.
Example code worked for me :-
$guzzle = new \GuzzleHttp\Client(['verify' => 'D:\wamp64\bin\php\php7.3.1\extras\ssl\cacert.pem']);
cURL error 60: SSL certificate problem: unable to get local issuer certificate
This problem can occur when developing locally on windows. I am using windows 10 (x64)
In order to fix the error, I downloaded cacert.pem from //curl.haxx.se/docs/caextract.html
Set the following value for in php.ini
curl.cainfo = "C: \ php-8.0.7 \ extras \ ssl \ cacert.pem"
As of PHP 7.2 (Win 64) this directive, will NOT show in the phpinfo() even though it's set.
CURLOPT_CAINFO_0
Dari PHP, Anda dapat mengakses Perpustakaan cURL (libcurl) yang berguna untuk membuat permintaan ke URL menggunakan berbagai protokol seperti HTTP, FTP, LDAP, dan bahkan Gopher. (Jika Anda menghabiskan waktu di baris perintah *nix, sebagian besar lingkungan juga memiliki perintah curl yang tersedia yang menggunakan pustaka libcurl)
Namun dalam praktiknya, protokol yang paling umum digunakan cenderung HTTP, terutama saat menggunakan PHP untuk komunikasi server-ke-server. Biasanya ini melibatkan mengakses server web lain sebagai bagian dari panggilan layanan web, menggunakan beberapa metode seperti XML-RPC atau REST untuk menanyakan sumber daya. Misalnya, Delicious menawarkan API berbasis HTTP untuk memanipulasi dan membaca postingan pengguna. Namun, ketika mencoba mengakses sumber daya HTTPS (seperti API yang enak), ada sedikit konfigurasi yang harus Anda lakukan sebelum Anda dapat membuat cURL berfungsi dengan benar di PHP
Masalah
Jika Anda hanya mencoba mengakses HTTPS (sumber daya yang dilindungi SSL atau TLS) di PHP menggunakan cURL, kemungkinan besar Anda akan mengalami beberapa kesulitan. Katakanlah Anda memiliki kode berikut. (Penanganan kesalahan dihilangkan untuk singkatnya)
// Initialize session and set URL. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // Set so curl_exec returns the result instead of outputting it. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Get the response and close the channel. $response = curl_exec($ch); curl_close($ch);Jika $url_ mengarah ke sumber daya HTTPS, kemungkinan besar Anda akan menemui kesalahan seperti di bawah ini
Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed_Masalahnya adalah cURL belum dikonfigurasi untuk mempercayai sertifikat HTTPS server. Konsep sertifikat dan PKI berkisar pada kepercayaan Otoritas Sertifikat (CA), dan secara default, cURL diatur untuk tidak mempercayai CA mana pun, sehingga tidak akan mempercayai sertifikat server web mana pun. Jadi mengapa Anda tidak mengalami masalah saat mengunjungi situs HTTP melalui browser web Anda?
Perbaikan cepat
Ada dua cara untuk mengatasi masalah ini. Pertama, kita cukup mengonfigurasi cURL untuk menerima sertifikat server (peer) apa pun. Ini tidak optimal dari sudut pandang keamanan, tetapi jika Anda tidak menyampaikan informasi sensitif bolak-balik, ini mungkin baik-baik saja. Cukup tambahkan baris berikut sebelum memanggil curl_exec()
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);Ini pada dasarnya menyebabkan cURL menerima sertifikat server apa pun secara membabi buta, tanpa melakukan verifikasi apa pun tentang CA mana yang menandatanganinya, dan apakah CA itu dipercaya atau tidak. Jika Anda benar-benar khawatir tentang data yang Anda berikan atau terima dari server, Anda sebaiknya mengaktifkan verifikasi rekan ini dengan benar. Melakukannya sedikit lebih rumit
Perbaikan yang tepat
Perbaikan yang tepat melibatkan pengaturan parameter CURLOPT_CAINFO. Ini digunakan untuk menunjuk ke sertifikat CA yang harus dipercaya oleh cURL. Dengan demikian, setiap sertifikat server/peer yang dikeluarkan oleh CA ini juga akan dipercaya. Untuk melakukan ini, pertama-tama kita perlu mendapatkan sertifikat CA. Dalam contoh ini, saya akan menggunakan https. // api. del. ini. us/ server sebagai referensi
Pertama, Anda harus mengunjungi URL dengan browser web Anda untuk mendapatkan sertifikat CA. Kemudian, (di Firefox) buka detail keamanan situs dengan mengklik dua kali ikon gembok di pojok kanan bawah
Kemudian klik "Lihat Sertifikat"
Buka tab "Detail" di halaman sertifikat, dan pilih sertifikat di bagian atas hierarki. Ini adalah sertifikat CA
Kemudian klik "Ekspor", dan simpan sertifikat CA ke lokasi yang Anda pilih, pastikan untuk memilih X. 509 Certificate (PEM) sebagai jenis/format penyimpanan
Sekarang kita perlu memodifikasi pengaturan cURL untuk menggunakan sertifikat CA ini, dengan CURLOPT_CAINFO diatur ke titik tempat kita menyimpan file sertifikat CA
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CAcerts/BuiltinObjectToken-EquifaxSecureCA.crt");Opsi lain yang saya sertakan, CURLOPT_SSL_VERIFYHOST dapat diatur ke nilai bilangan bulat berikut
- 0. Jangan centang atribut nama umum (CN).
- 1. Periksa apakah atribut nama umum setidaknya ada
- 2. Periksa apakah nama umum ada dan cocok dengan nama host server
Jika Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed0 disetel ke false, maka dari sudut pandang keamanan, tidak masalah apa yang telah Anda setel CURLOPT_SSL_VERIFYHOST ke, karena tanpa verifikasi sertifikat peer, server dapat menggunakan sertifikat apa pun, termasuk sertifikat yang ditandatangani sendiri yang dijamin . Jadi pengaturan ini benar-benar hanya relevan jika Anda telah mengaktifkan verifikasi sertifikat
Ini memastikan bahwa tidak sembarang sertifikat server akan dipercaya oleh sesi cURL Anda. Misalnya, jika penyerang entah bagaimana mengalihkan lalu lintas dari api. lezat. com ke server mereka sendiri, sesi cURL di sini tidak akan diinisialisasi dengan benar, karena penyerang tidak akan memiliki akses ke sertifikat server (i. e. tidak akan memiliki kunci privat) yang dipercaya oleh CA yang kami tambahkan. Langkah-langkah ini secara efektif mengekspor CA tepercaya dari browser web ke konfigurasi cURL
Informasi lebih lanjut
Jika Anda memiliki sertifikat CA, tetapi tidak dalam format PEM (mis. e. itu dalam format biner atau DER yang tidak dikodekan Base64), Anda harus menggunakan sesuatu seperti OpenSSL untuk mengonversinya ke format PEM. Perintah persisnya berbeda tergantung pada apakah Anda mengonversi dari format PKCS12 atau DER
Ada opsi Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed_2 yang memungkinkan Anda menentukan direktori yang menyimpan beberapa sertifikat CA untuk dipercaya. Tapi itu tidak sesederhana membuang setiap sertifikat CA di direktori ini. Sebagai gantinya, sertifikat CA mereka harus diberi nama dengan benar, dan utilitas OpenSSL Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed3 dapat digunakan untuk mengatur direktori ini dengan benar untuk digunakan oleh cURL