PHP CURL CURLOPT_SSL_VERIFYPEER diabaikan

117

Untuk beberapa alasan saya tidak dapat menggunakan CURL dengan HTTPS. Semuanya berfungsi dengan baik sampai saya menjalankan peningkatan pustaka curl. Sekarang saya mengalami respons ini saat mencoba melakukan permintaan CURL: Masalah dengan sertifikat CA SSL (jalur? Hak akses?)

Berikut saran yang diposting di sini tentang masalah terkait, saya telah mencoba melakukan hal berikut:

  • Nonaktifkan verifikasi untuk host dan rekan

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
  • Aktifkan CURLOPT_SSL_VERIFYPEERdan arahkan ke cacert.pem yang diunduh dari http://curl.haxx.se/docs/caextract.html

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
  • Saya juga mencoba melakukan hal yang sama dengan positiveSSL.ca-bundle yang disediakan sebagai bundel sertifikat CA untuk server yang saya coba sambungkan.

  • Edit pengaturan php ini dengan curl.cainfo=cacert.pem(file di direktori yang sama dan dapat diakses oleh apache)

  • Ganti nama /etc/pki/nssdbmenjadi/etc/pki/nssdb.old

Sayangnya tidak ada di atas yang dapat menyelesaikan masalah saya dan saya terus-menerus mendapatkan Masalah dengan pesan SSL CA cert (path? Access rights?).

Dan saya tidak memerlukan verifikasi ini sejak awal (saya mengetahui masalah keamanan).

Apakah ada yang punya saran lain?

MEMPERBARUI

Setelah memperbarui ke pustaka terbaru dan memulai ulang seluruh kotak, bukan hanya apache yang saya lakukan semuanya tampaknya berfungsi sekarang lagi !!!

Greg
sumber
1
Apakah Anda memutakhirkan pustaka Curl yang dikompilasi terhadap tumpukan SSL yang berbeda (GnuTLS vs OpenSSL, mungkin)?
Bruno
Saya tidak akan berpikir begitu. Sistemnya adalah Fedora 16 dan itu benar-benar kasus pembaruan yum. Hal yang paling menjengkelkan adalah saya tidak memerlukan / menginginkan seluruh validasi ini dan sepertinya saya tidak bisa begitu saja menonaktifkannya.
Greg
Jika Anda ingin menggunakan HTTPS untuk keamanan, Anda pasti ingin memiliki proses validasi ini.
Bruno
Saya menyadarinya, namun kasus penggunaan saya di sini membuat semuanya menjadi sedikit berlebihan. Juga, saya telah memperbarui curl ke yang terbaru, dan php ke 5.4. Sekarang, pesan kesalahan hilang, tapi saya juga tidak mendapatkan perhatian dari curl :)
Greg
Ha, sekarang saya mendapatkan laporan fungsi suatu tempat curl_errno status 77 yang menurut manual adalah CURLE_SSL_CACERT_BADFILE.
Greg

Jawaban:

240

Menurut dokumentasi: untuk memverifikasi sertifikat tuan rumah atau rekan Anda perlu menentukan sertifikat alternatif dengan CURLOPT_CAINFOopsi atau direktori sertifikat dapat ditentukan denganCURLOPT_CAPATH opsi tersebut.

Lihat juga CURLOPT_SSL_VERIFYHOST:

  • 1 untuk memeriksa keberadaan nama umum dalam sertifikat peer SSL.
  • 2 untuk memeriksa keberadaan nama umum dan juga memverifikasi bahwa itu cocok dengan nama host yang diberikan.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
semanggi
sumber
5
Mematikan verifikasi SSL cukup banyak menghapus semua keamanan SSL. Anda harus memperbaiki konfigurasi PHP Anda.
Scopey
7
@Scopey tetapi terkadang Anda mungkin membutuhkannya di lingkungan pengembangan lokal dengan sertifikat yang ditandatangani sendiri. Jadi mungkin tidak masuk akal pada lingkungan non-publik, tetapi sebagai pengingat, selalu lebih baik untuk memiliki beberapa peringatan di log (misalnya SSL verification disabled)
Ivan Borshchov
2

Kami memiliki masalah yang sama pada mesin CentOS7. Menonaktifkan VERIFYHOST VERIFYPEERtidak menyelesaikan masalah, kami tidak lagi mengalami kesalahan cURL tetapi tanggapannya masih tidak valid. Melakukan awget ke tautan yang sama seperti yang dilakukan cURL juga mengakibatkan kesalahan sertifikat.

-> Solusi kami juga adalah me-reboot VPS, ini menyelesaikannya dan kami dapat menyelesaikan permintaan lagi.

Bagi kami ini tampaknya menjadi masalah kerusakan memori. Reboot VPS memuat ulang libary di memori lagi dan sekarang berfungsi. Jadi jika solusi di atas @clovertidak berhasil, coba reboot mesin Anda.

Rvanlaak
sumber
Pastikan itu tidak terputus-putus. Saya mengalami masalah dengan verifikasi paypal dan peer yang terkadang berhasil, terkadang tidak. Sepertinya acak. Secara eksplisit mengatur jalur kafet dan memberi tahu curl di mana itu memecahkan masalah.
Neil Davis