Saya menggunakan WAMP pada lingkungan pengembangan lokal dan saya mencoba menagih kartu kredit tetapi mendapatkan pesan kesalahan:
kesalahan CURL 60: Masalah sertifikat SSL: tidak bisa mendapatkan sertifikat penerbit lokal
Saya banyak mencari di Google dan banyak orang menyarankan agar saya mengunduh file ini: cacert.pem , letakkan di suatu tempat dan rujuk di php.ini saya. Ini adalah bagian dalam php.ini saya:
curl.cainfo = "C:\Windows\cacert.pem"
Namun, bahkan setelah me-restart server saya beberapa kali dan mengubah path, saya mendapatkan pesan kesalahan yang sama.
Saya menggunakan WAMP dari Modul Apache dan memiliki ssl_module diaktifkan. Dan dari ekstensi PGP saya mengaktifkan php_curl.
Masih pesan kesalahan yang sama. Mengapa itu terjadi?
Sekarang saya mengikuti perbaikan ini: Cara memperbaiki PHP CURL Error 60 SSL
Yang menyarankan agar saya menambahkan baris ini ke opsi CURL saya:
curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, true);
Di mana saya menambahkan opsi ke CURL saya? Tampaknya tidak melalui baris perintah, karena CLI saya tidak menemukan perintah "curl_setopt"
EDIT
Ini adalah kode yang saya jalankan:
public function chargeStripe()
{
$stripe = new Stripe;
$stripe = Stripe::make(env('STRIPE_PUBLIC_KEY'));
$charge = $stripe->charges()->create([
'amount' => 2900,
'customer' => Input::get('stripeEmail'),
'currency' => 'EUR',
]);
dd($charge);
// echo $charge[Input::get('stripeToken')];
return Redirect::route('step1');
}
Jawaban:
Solusi yang berfungsi dengan asumsi Anda menggunakan Windows di XAMPP:
Mulai ulang server web / apache Anda
Masalah terpecahkan!
(Referensi: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate )
sumber
curl.cainfo = "C:/cacert.pem"
dan juga harus me-restart komputer saya agar bisa berfungsi. Memulai ulang server web saja tidak cukup. Semoga itu membantu:]curl.cainfo
(facepalm)Perhatian pengguna Wamp / Wordpress / windows. Saya memiliki masalah ini selama berjam-jam dan bahkan jawaban yang benar tidak melakukannya untuk saya, karena saya mengedit file php.ini yang salah karena pertanyaannya dijawab untuk XAMPP dan bukan untuk pengguna WAMP, meskipun pertanyaannya adalah untuk WAMP.
inilah yang saya lakukan
Unduh bundel sertifikat.
Masukkan ke dalam
C:\wamp64\bin\php\your php version\extras\ssl
Pastikan file
mod_ssl.so
berada di dalamC:\wamp64\bin\apache\apache(version)\modules
Aktifkan
mod_ssl
dihttpd.conf
dalam direktori ApacheC:\wamp64\bin\apache\apache2.4.27\conf
Aktifkan
php_openssl.dll
diphp.ini
. Perlu diketahui masalah saya adalah bahwa saya memiliki dua file php.ini dan saya perlu melakukan ini di keduanya. Yang pertama dapat ditemukan di dalam ikon taskbar WAMP Anda di sini.dan yang lainnya terletak di
C:\wamp64\bin\php\php(Version)
temukan lokasi untuk kedua
php.ini
file dan temukan bariscurl.cainfo =
dan berikan path seperti inicurl.cainfo = "C:\wamp64\bin\php\php(Version)\extras\ssl\cacert.pem"
Sekarang simpan file dan mulai ulang server Anda dan Anda harus baik-baik saja
sumber
Jika Anda menggunakan PHP 5.6 dengan Guzzle, Guzzle telah beralih menggunakan autodetect PHP libraries untuk sertifikat daripada prosesnya ( ref ). PHP menguraikan perubahan di sini .
Mencari Tahu Dimana PHP / Guzzle Mencari Sertifikat
Anda dapat membuang di mana PHP mencari menggunakan:
Mendapatkan Bundel Sertifikat
Untuk pengujian OS X, Anda dapat menggunakan homebrew untuk menginstal openssl
brew install openssl
dan kemudian gunakanopenssl.cafile=/usr/local/etc/openssl/cert.pem
di pengaturan php.ini atau Zend Server Anda (di bawah OpenSSL).Bundel sertifikat juga tersedia dari curl / Mozilla di situs web curl: https://curl.haxx.se/docs/caextract.html
Memberitahu PHP Di Mana Sertifikat
Setelah Anda memiliki bundel, letakkan di tempat yang sudah dilihat PHP (yang Anda temukan di atas) atau perbarui
openssl.cafile
di php.ini. (Umumnya,/etc/php.ini
atau/etc/php/7.0/cli/php.ini
atau/etc/php/php.ini
di Unix.)sumber
openssl_get_cert_locations
, itu membuat proses debug jauh lebih mudah. Sepertinya WAMP menggunakan file ini berbeda untuk php apache daripada untuk konsol php. Dalam kasus saya, saya harus menambahkanopenssl.cafile="c:/_/cacert.pem"
untuk php berbasis konsol. Terakhir kali, ketika menggunakannya melalui apache, saya haruscurl.cainfo="c:/_/cacert.pem"
membuatnya berfungsi.Guzzle, yang digunakan oleh cartalyst / stripe , akan melakukan hal berikut untuk menemukan arsip sertifikat yang tepat untuk memeriksa sertifikat server terhadap:
openssl.cafile
sudah diatur dalam file php.ini Anda.curl.cainfo
sudah diatur dalam file php.ini Anda./etc/pki/tls/certs/ca-bundle.crt
ada (Red Hat, CentOS, Fedora; disediakan oleh paket ca-sertifikat)/etc/ssl/certs/ca-certificates.crt
ada (Ubuntu, Debian; disediakan oleh paket ca-sertifikat)/usr/local/share/certs/ca-root-nss.crt
ada (FreeBSD; disediakan oleh paket ca_root_nss)/usr/local/etc/openssl/cert.pem
(OS X; disediakan oleh homebrew)C:\windows\system32\curl-ca-bundle.crt
ada (Windows)C:\windows\curl-ca-bundle.crt
ada (Windows)Anda akan ingin memastikan bahwa nilai-nilai untuk dua pengaturan pertama didefinisikan dengan benar dengan melakukan tes sederhana:
Atau, cobalah menulis file ke lokasi yang ditunjukkan oleh # 7 atau # 8.
sumber
Jika Anda tidak dapat mengubah php.ini, Anda juga dapat mengarahkan ke file cacert.pem dari kode seperti ini:
sumber
Apa yang saya lakukan adalah digunakan
var_dump(openssl_get_cert_locations()); die;
dalam skrip php apa pun, yang memberi saya informasi tentang default yang digunakan php lokal saya:Seperti yang Anda perhatikan, saya telah menyetel ini_cafile atau opsi ini curl.cainfo. Tetapi dalam kasus saya, curl akan mencoba menggunakan "default_cert_file" yang tidak ada.
Saya menyalin file dari https://curl.haxx.se/ca/cacert.pem ke lokasi untuk "default_cert_file" (c: /openssl-1.0.1c/ssl/cert.pem) dan saya bisa mendapatkannya bekerja.
Ini adalah satu-satunya solusi bagi saya.
sumber
Saya mengalami masalah ini muncul tiba-tiba suatu hari, ketika skrip Guzzle (5) berusaha untuk terhubung ke host melalui SSL. Tentu, saya bisa menonaktifkan opsi VERIFY di Guzzle / Curl, tapi itu jelas bukan cara yang tepat untuk pergi.
Saya mencoba semua yang tercantum di sini dan di utas yang serupa, kemudian akhirnya pergi ke terminal dengan openssl untuk menguji domain yang saya coba sambungkan:
... dan menerima beberapa baris pertama yang menunjukkan:
... sementara semuanya bekerja dengan baik ketika mencoba tujuan lain (yaitu: google.com, dll)
Ini mendorong saya untuk menghubungi domain yang saya coba sambungkan, dan memang, mereka memiliki masalah pada MEREKA AKHIR yang merangkak naik. Itu diselesaikan dan skrip saya kembali berfungsi.
Jadi ... jika Anda mencabut rambut Anda, berikan suntikan pada openssl dan lihat apakah ada sesuatu dengan respons dari lokasi yang Anda coba sambungkan. Mungkin masalahnya tidak terlalu 'lokal'.
sumber
Saya menemukan solusi yang berhasil untuk saya. Saya menurunkan versi dari guzzle terbaru ke versi ~ 4.0 dan berhasil.
Dalam composer.json tambahkan "guzzlehttp / guzzle": "~ 4.0"
Semoga ini bisa membantu seseorang
sumber
Pastikan Anda membuka
php.ini
file secara langsung oleh Window Explorer Anda. (dalam kasus saya:)C:\DevPrograms\wamp64\bin\php\php5.6.25
.Jangan gunakan pintasan ke
php.ini
dalam menu ikon Wamp / Xamp di Baki Sistem. Pintasan ini tidak berfungsi dalam hal ini.Kemudian edit itu
php.ini
:dan
Setelah menyimpan
php.ini
Anda tidak perlu "Restart All Services" di ikon Wamp atau tutup / buka kembali CMD.sumber
Sudahkah Anda mencoba ..
Jika Anda menggunakan sumber tepercaya, Anda tidak perlu memverifikasi sertifikat SSL.
sumber
Saya menghabiskan terlalu banyak waktu untuk mencari tahu masalah ini untuk saya.
Saya memiliki PHP versi 5.5 dan saya perlu meningkatkan ke 5.6.
Dalam versi <5.6 Guzzle akan menggunakan file cacert.pem itu sendiri, tetapi dalam versi PHP yang lebih tinggi ia akan menggunakan file cacert.pem sistem.
Saya juga mengunduh file dari sini https://curl.haxx.se/docs/caextract.html dan mengaturnya di php.ini.
Jawaban ditemukan dalam file Guidelines StreamHandler.php https://github.com/guzzle/guzzle/blob/0773d442aa96baf19d7195f14ba6e9c2da11f8ed/src/Handler/StreamHandler.php#L437
sumber
Semua jawaban itu benar; tetapi yang paling penting adalah Anda harus menemukan file php.ini yang tepat. periksa perintah ini dalam cmd "php --ini" bukan jawaban yang tepat untuk menemukan file php.ini yang tepat.
jika Anda mengedit
dan cek
maka curl.cainfo harus memiliki nilai. jika tidak maka itu bukan file php.ini yang benar;
* Saya sarankan Anda untuk mencari * .ini di wamp / bin atau xxamp / bin atau server apa pun yang Anda gunakan dan ubah satu per satu dan periksa. *
sumber
Saya baru saja mengalami masalah yang sama dengan kerangka PHP Laravel 4 yang menggunakan
guzzlehttp/guzzle
paket komposer. Untuk beberapa alasan, sertifikat SSL untuk mailgun berhenti tiba-tiba divalidasi dan saya mendapat pesan "kesalahan 60" yang sama.Jika, seperti saya, Anda menggunakan hosting bersama tanpa akses
php.ini
, solusi lain tidak mungkin. Bagaimanapun, Guzzle memiliki kode inisialisasi klien ini yang kemungkinan besar akan membatalkanphp.ini
efek:Di sini Guzzle memaksa penggunaan file cacert.pem internalnya sendiri, yang mungkin sekarang sudah ketinggalan zaman, alih-alih menggunakan yang disediakan oleh lingkungan cURL . Mengubah baris ini (setidaknya di Linux) mengkonfigurasi Guzzle untuk menggunakan logika verifikasi SSL default cURL dan memperbaiki masalah saya:
Anda juga dapat mengatur ini
false
jika Anda tidak peduli dengan keamanan koneksi SSL Anda, tetapi itu bukan solusi yang baik.Karena file-file di
vendor
dalamnya tidak dimaksudkan untuk dirusak, solusi yang lebih baik adalah mengkonfigurasi klien Guzzle pada penggunaan, tetapi ini terlalu sulit untuk dilakukan di Laravel 4.Semoga ini menyelamatkan orang lain beberapa jam dari debugging ...
sumber
Ini mungkin kasus tepi, tetapi dalam kasus saya masalahnya bukan klien conf (saya sudah
curl.cainfo
mengkonfigurasi diphp.ini
), tetapi server jauh tidak dikonfigurasi dengan benar:Itu tidak mengirim sertifikat perantara dalam rantai. Tidak ada kesalahan saat menelusuri situs menggunakan Chrome, tetapi dengan PHP saya mendapat kesalahan berikut.
Setelah memasukkan Sertifikat Menengah dalam konfigurasi server web jarak jauh itu berhasil.
Anda dapat menggunakan situs ini untuk memeriksa konfigurasi SSL server Anda:
https://whatsmychaincert.com/
sumber
ketika saya menjalankan
'var_dump(php_ini_loaded_file());'
saya mendapatkan output ini di halaman saya'C:\Development\bin\apache\apache2.4.33\bin\php.ini' (length=50)'
dan untuk mendapatkan php untuk memuat file cert saya, saya harus mengedit php.ini di jalur ini
'C:\Development\bin\apache\apache2.4.33\bin\php.ini'
dan menambahkan diopenssl.cafile="C:/Development/bin/php/php7.2.4/extras/ssl/cacert.pem"
mana saya telah mengunduh dan menempatkan file cert saya dari https://curl.haxx.se/docs/caextract.htmlSaya di windows 10, menggunakan drupal 8, wamp dan php7.2.4
sumber
Saya punya solusi yang tepat untuk masalah ini, mari kita coba dan memahami akar penyebab masalah ini. Masalah ini muncul ketika server jauh ssl tidak dapat diverifikasi menggunakan sertifikat root di toko sertifikat sistem Anda atau ssl jarak jauh tidak diinstal bersama dengan sertifikat berantai. Jika Anda memiliki sistem linux dengan akses ssh root, maka dalam hal ini Anda dapat mencoba memperbarui toko sertifikat Anda dengan perintah di bawah ini:
update-ca-certificates
Jika masih, itu tidak berfungsi maka Anda perlu menambahkan root dan sertifikat interim dari server jauh di toko sertifikat Anda. Anda dapat mengunduh sertifikat root dan perantara dan menambahkannya direktori / usr / local / share / ca-sertifikat dan kemudian jalankan perintah
update-ca-certificates
. Ini harus melakukan trik. Demikian pula untuk windows Anda dapat mencari cara menambahkan root dan sertifikat menengah.Cara lain Anda dapat mengatasi masalah ini adalah dengan meminta tim server jarak jauh untuk menambahkan sertifikat ssl sebagai kumpulan sertifikat root domain, sertifikat menengah dan sertifikat root.
sumber
Saat Anda menggunakan Windows, saya pikir pemisah jalur Anda adalah '\' (dan '/' di Linux). Coba gunakan konstanta
DIRECTORY_SEPARATOR
. Kode Anda akan lebih portabel.Mencoba:
Sunting: dan tulis path lengkapnya. Saya punya beberapa masalah dengan path relatif (mungkin curl dijalankan dari direktori basis lain?)
sumber
jika Anda menggunakan WAMP, Anda juga harus menambahkan baris sertifikat di php.ini untuk Apache (selain file php.ini default):
bekerja untuk php5.3 +
sumber