Saya menggunakan WAMP pada lingkungan pembangunan daerah dan saya mencoba untuk mengisi kartu kredit tapi mendapatkan pesan error:
cURL error 60: sertifikat SSL masalah: tidak dapat mendapatkan setempat penerbit sertifikat
Aku mencari banyak di Google dan banyak orang yang menyarankan bahwa saya men-download file ini: cacert.pem, meletakkannya di suatu tempat dan referensi di php saya.ini. Ini adalah bagian di php saya.ini:
curl.cainfo = "C:\Windows\cacert.pem"
Namun, bahkan setelah restart server saya beberapa kali dan mengubah jalan, saya mendapatkan pesan kesalahan yang sama.
Saya menggunakan WAMP dari Modul Apache dan memiliki ssl_module diaktifkan. Dan dari PGP ekstensi saya telah php_curl diaktifkan.
Masih pesan kesalahan yang sama. Mengapa hal itu terjadi?
Sekarang saya berikut ini fix: Cara untuk memperbaiki PHP CURL Error 60 SSL
Yang menunjukkan bahwa saya menambahkan baris ini ke saya cURL pilihan:
curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, true);
Di mana saya menambahkan opsi untuk saya cURL? Rupanya tidak melalui command line, karena saya CLI doesn't 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');
}
solusi kerja:
XAMPP server
serupa untuk lingkungan lainnya
C:\xampp\php\extras\ssl\cacert.pem
;;;;;;;;;;;;;;;;;;;; ; php.ini Pilihan ; ;;;;;;;;;;;;;;;;;;;;
curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
Masalah terpecahkan!
Jika anda menggunakan PHP 5.6 dengan membuang waktu, membuang waktu telah beralih untuk menggunakan PHP perpustakaan autodetect untuk sertifikat daripada itu's process (ref). PHP menguraikan perubahan di sini.
Anda dapat membuang dimana PHP adalah mencari menggunakan:
var_dump(openssl_get_cert_locations());
Untuk OS X pengujian, anda dapat menggunakan homebrew untuk install openssl brew install openssl
dan kemudian menggunakan openssl.cafile=/usr/local/etc/openssl/cert.pem
di php.ini atau Zend Server settings (di bawah OpenSSL).
Sertifikat bundel ini juga tersedia dari curl/Mozilla pada curl website: https://curl.haxx.se/docs/caextract.html
Setelah anda memiliki bundel, kedua tempat itu di mana PHP sudah mencari (yang anda menemukan atas) atau update openssl.cafile
di php.ini. (Umumnya, /etc/php.ini
atau /etc/php/7.0/cli/php.ini
atau /etc/php/php.ini
pada Unix.)
Perhatian Wamp/Wordpress/pengguna windows. Aku punya masalah ini selama berjam-jam dan bahkan tidak jawaban yang benar melakukan itu untuk saya, karena saya mengedit salah php.file ini karena pertanyaan itu dijawab dengan XAMPP dan tidak untuk WAMP pengguna, meskipun pertanyaan itu untuk WAMP.
berikut ini's apa yang saya lakukan
Download bundel sertifikat.
Memasukkannya ke dalam C:\wamp64\bin\php\your versi php\extras\ssl
Pastikan file mod_ssl.begitu
dalam C:\wamp64\bin\apache\apache(versi)\modul
Aktifkan mod_ssl
di httpd.conf
di dalam direktori Apache C:\wamp64\bin\apache\apache2.4.27\conf
Aktifkan php_openssl.dll
di php.ini
. Menyadari masalah saya adalah bahwa saya memiliki dua php.berkas ini dan saya perlu untuk melakukan hal ini pada mereka berdua. Pertama dapat ditemukan dalam WAMP ikon taskbar di sini.
dan yang lainnya adalah terletak di C:\wamp64\bin\php\php(Versi)
menemukan lokasi untuk kedua php.ini
file dan cari baris curl.cainfo =
dan memberikan jalan seperti ini
curl.cainfo = "C:\wamp64\bin\php\php(Versi)\extras\ssl\cacert.pem"
Sekarang simpan file dan restart server anda dan anda harus baik untuk pergi
Membuang waktu, yang digunakan oleh cartalyst/strip, akan melakukan hal berikut untuk menemukan yang tepat sertifikat arsip untuk memeriksa sertifikat server terhadap:
openssl.cafile
diatur di php.file ini.curl.cainfo
diatur di php.file ini./etc/pki/tls/certs/ca-bundle.crt
ada (Red Hat, CentOS, Fedora; disediakan oleh ca-paket sertifikat)/etc/ssl/certs/ca-certificates.crt
ada (Ubuntu, Debian, yang disediakan oleh ca-paket sertifikat)/usr/local/share/certs/ca-root-nss.crt
ada (FreeBSD; disediakan oleh ca_root_nss paket)/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 untuk memastikan bahwa nilai-nilai untuk pertama dua pengaturan yang didefinisikan dengan baik dengan melakukan tes sederhana:
echo "openssl.cafile: ", ini_get('openssl.cafile'), "\n";
echo "curl.cainfo: ", ini_get('curl.cainfo'), "\n";
Atau, cobalah untuk menulis file ke lokasi yang ditunjukkan oleh #7 atau #8.
Jika anda're mampu mengubah php.ini anda juga bisa menunjuk ke cacert.pem file dari kode seperti ini:
$http = new GuzzleHttp\Client(['verify' => '/path/to/cacert.pem']);
$client = new Google_Client();
$client->setHttpClient($http);
Apa yang saya lakukan adalah menggunakan var_dump(openssl_get_cert_locations()); die;
dalam setiap script php, yang memberi saya informasi tentang default yang lokal saya php adalah menggunakan:
array (size=8)
'default_cert_file' => string 'c:/openssl-1.0.1c/ssl/cert.pem' (length=30)
'default_cert_file_env' => string 'SSL_CERT_FILE' (length=13)
'default_cert_dir' => string 'c:/openssl-1.0.1c/ssl/certs' (length=27)
'default_cert_dir_env' => string 'SSL_CERT_DIR' (length=12)
'default_private_dir' => string 'c:/openssl-1.0.1c/ssl/private' (length=29)
'default_default_cert_area' => string 'c:/openssl-1.0.1c/ssl' (length=21)
'ini_cafile' => string 'E:\xampp\php\extras\ssl\cacert.pem' (length=34)
'ini_capath' => string '' (length=0)
Seperti yang anda perhatikan, saya telah mengatur ini_cafile atau ini pilihan curl.cainfo. Tapi dalam kasus saya, curl akan mencoba untuk 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 untuk bekerja.
Ini adalah satu-satunya solusi bagi saya.
Aku punya masalah ini muncul out-of-the-biru suatu hari, ketika membuang waktu(5) naskah yang sedang mencoba untuk terhubung ke sebuah host melalui SSL. Yakin, aku bisa menonaktifkan opsi VERIFIKASI di Guzzle/Curl, tapi yang's jelas tidak benar cara untuk pergi.
Aku mencoba segala sesuatu ** terdaftar di sini dan di thread yang sama, maka akhirnya pergi ke terminal dengan openssl untuk menguji terhadap domain yang saya sedang mencoba untuk menghubungkan:
openssl s_client -connect example.com:443
... dan menerima beberapa baris pertama menunjukkan:
CONNECTED(00000003)
depth=0 CN = example.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = example.com
verify error:num=21:unable to verify the first certificate
verify return:1
... saat semuanya bekerja dengan baik ketika mencoba tujuan lainnya (ie: google.com, dll)
Hal ini mendorong saya untuk menghubungi domain saya telah mencoba untuk terhubung ke, dan memang, mereka punya masalah pada AKHIR MEREKA yang telah merangkak naik. Hal itu diselesaikan dan naskah saya kembali untuk bekerja.
Jadi... jika anda'kembali menarik rambut anda, memberikan openssl tembakan dan melihat jika ada's apa-apa dengan respon dari lokasi anda mencoba untuk terhubung. Mungkin masalah ini isn't jadi 'lokal' setelah semua kadang-kadang.
Semua jawaban adalah benar ; tapi yang paling penting Anda harus menemukan yang tepat php.file ini. periksa perintah ini di cmd " php --ini " ini bukan jawaban yang tepat untuk menemukan yang tepat php.file ini.
jika anda edit
curl.cainfo ="PATH/cacert.pem"
dan memeriksa
var_dump(openssl_get_cert_locations());
kemudian meringkuk.cainfo harus memiliki nilai. jika tidak maka yang's tidak tepat php.ini file;
*Saya sarankan anda untuk mencari *.ini di wamp/bin atau xxamp/bin atau server yang anda gunakan dan mengubah mereka satu per satu dan memeriksa. *
Pastikan bahwa anda membuka php.ini
file secara langsung melalui Jendela Explorer. (dalam kasus saya: C:\DevPrograms\wamp64\bin\php\php5.6.25
).
Don't menggunakan shortcut untuk php.ini
di Wamp/Xamp ikon's menu di System Tray. Shortcut ini doesn't bekerja dalam kasus ini.
Kemudian edit bahwa php.ini
:
curl.cainfo ="C:/DevPrograms/wamp64/bin/php/cacert.pem"
dan
openssl.cafile="C:/DevPrograms/wamp64/bin/php/cacert.pem"
Setelah menyimpan php.ini
anda don't perlu "Restart Semua Layanan" di Wamp ikon atau menutup/membuka kembali CMD.
Saya baru saja mengalami masalah yang sama dengan Laravel 4 framework php yang menggunakan guzzlehttp/membuang waktu
komposer paket. Untuk beberapa alasan, sertifikat SSL untuk mailgun berhenti memvalidasi tiba-tiba dan aku punya yang sama "kesalahan 60" pesan.
Jika, seperti saya, anda berada di shared hosting tanpa akses ke php.ini
, solusi lain yang tidak mungkin. Dalam kasus apapun, membuang waktu memiliki klien ini menginisialisasi kode yang kemungkinan besar akan membatalkan php.ini
efek:
// vendor/guzzlehttp/guzzle/src/Client.php
$settings = [
'allow_redirects' => true,
'exceptions' => true,
'decode_content' => true,
'verify' => __DIR__ . '/cacert.pem'
];
Di sini membuang waktu penggunaan kekuatan internal sendiri cacert.pem file, yang mungkin sekarang out of date, daripada menggunakan yang disediakan oleh cURL's lingkungan. Mengubah baris ini (di Linux setidaknya) mengkonfigurasi membuang waktu untuk menggunakan cURL's default-SSL verifikasi logika dan tetap masalah saya:
'verify' => true
Anda juga dapat mengatur ini untuk palsu
jika anda don't peduli tentang keamanan koneksi SSL, tapi yang's bukan solusi yang baik.
Karena file dalam vendor
tidak dimaksudkan untuk dirusak, solusi yang lebih baik akan mengkonfigurasi membuang waktu klien pada penggunaan, tapi ini terlalu sulit untuk dilakukan di Laravel 4.
Semoga ini bisa menyelamatkan orang lain beberapa jam debugging...
ketika saya menjalankan 'var_dump(php_ini_loaded_file());'
Saya mendapatkan output ini pada halaman saya
'C:\Development\bin\apache\apache2.4.33\bin\php.ini' (panjang=50)'
dan untuk mendapatkan php untuk memuat file cert saya harus edit php.ini di jalan ini 'C:\Development\bin\apache\apache2.4.33\bin\php.ini'
dan tambahkan openssl.cafile="C:/Development/bin/php/php7.2.4/extras/ssl/cacert.pem"
di mana saya telah didownload dan tempat saya cert file dari https://curl.haxx.se/docs/caextract.html
pada windows 10, dengan menggunakan drupal 8, wamp dan php7.2.4
Aku menghabiskan terlalu banyak waktu untuk mencari tahu masalah ini bagi saya.
Saya memiliki PHP versi 5.5 dan saya perlu untuk meng-upgrade ke 5.6.
Dalam versi < 5.6 membuang waktu akan menggunakannya's sendiri cacert.pem file, tapi di versi yang lebih tinggi dari PHP itu akan menggunakan sistem's cacert.pem file.
Saya juga file yang didownload dari sini https://curl.haxx.se/docs/caextract.html dan set di php.ini.
Jawabannya ditemukan di Guzzles StreamHandler.php file https://github.com/guzzle/guzzle/blob/0773d442aa96baf19d7195f14ba6e9c2da11f8ed/src/Handler/StreamHandler.php#L437
// PHP 5.6 atau lebih besar akan menemukan sistem cert secara default. Ketika // < 5.6, gunakan membuang waktu dibundel cacert.
Ini mungkin menjadi kasus tepi, tapi dalam kasus saya, masalahnya bukan klien conf (saya sudah punya curl.cainfo
dikonfigurasi dalam php.ini
), melainkan remote server tidak dikonfigurasi dengan benar:
Tidak mengirim apapun menengah sertifikat dalam rantai. Tidak ada kesalahan browsing menggunakan Chrome, tapi dengan PHP saya mendapat error berikut.
cURL error 60
Setelah termasuk Intermediate Sertifikat di remote konfigurasi webserver itu bekerja.
Anda dapat menggunakan situs ini untuk memeriksa konfigurasi SSL server anda:
Seperti anda menggunakan Windows, saya pikir anda jalan separator '\' (dan '/' di Linux).
Cobalah menggunakan konstan DIRECTORY_SEPARATOR
. Kode anda akan lebih portabel.
Coba:
curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cacert.pem');
EDIT: dan menulis path lengkap. Aku punya beberapa masalah dengan path relatif (mungkin curl dijalankan dari direktori?)