Pertanyaan Kesalahan Curl 60, masalah sertifikat SSL: sertifikat yang ditandatangani sendiri dalam rantai sertifikat


Saya mencoba mengirim permintaan curl dengan APP_ID saya yang benar, APP_SECRET, dll. Ke

  https://oauth.vk.com/access_token?client_id=APP_ID&client_secret=APP_SECRET&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a&redirect_uri=REDIRECT_URI 

Saya harus mendapatkan akses_token darinya, tetapi dapatkan SALAH dan FALSE curl_error() cetak pesan berikutnya jika tidak:

60: SSL certificate problem: self signed certificate in certificate chain

Kode saya adalah:

    // create curl resource
    $ch = curl_init();

    // set url
    curl_setopt($ch, CURLOPT_URL, $url);
    //return the transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    // $output contains the output string
    $output = curl_exec($ch);
    if ( ! $output) {
        print curl_errno($ch) .': '. curl_error($ch);
    }

    // close curl resource to free up system resources
    curl_close($ch);

    return $output;

Saat saya memindahkan secara manual ke tautan di atas, saya mendapatkan akses_token dengan baik. Mengapa tidak berfungsi dengan ikal? Tolonglah.


40
2018-01-17 14:15


asal


Jawaban:


Jawaban yang diterima tidak boleh diterima. Pertanyaannya adalah "Mengapa itu tidak bekerja dengan cURL", dan sebagaimana ditunjukkan dengan benar oleh Martijn Hols, itu berbahaya.

Kesalahan ini mungkin disebabkan karena tidak memiliki bundel sertifikat CA yang diperbarui. Ini biasanya adalah file teks dengan sekelompok tanda tangan kriptografi yang menggulung menggunakan untuk memverifikasi sertifikat SSL host.

Anda perlu memastikan bahwa instalasi PHP Anda memiliki salah satu dari file-file ini, dan itu adalah yang terbaru (jika tidak, unduh satu di sini: http://curl.haxx.se/docs/caextract.html).

Kemudian diatur dalam php.ini:

curl.cainfo = <absolute_path_to> cacert.pem

Jika Anda mengaturnya saat runtime, gunakan:

curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");

111
2018-05-10 19:40



Solusi ini adalah berbahaya dan tidak direkomendasikan:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Bukan ide yang baik untuk menonaktifkan verifikasi mitra SSL. Melakukan hal itu dapat mengekspos permintaan Anda ke penyerang MITM.

Bahkan, Anda hanya perlu memiliki sertifikat sertifikat root CA yang up-to-date. Memasang yang diperbarui semudah:

  1. Unduh terbaru cacert.pem file dari situs web cURL dan
  2. Menetapkan jalur ke file php.ini Anda, mis. di Windows:

    curl.cainfo=c:\php\cacert.pem

Itu dia!

Tetap aman dan aman.


31
2017-09-27 20:39



Karena protokolnya adalah https, Untuk mode pengembangan Anda dapat mengatur opsi curl ini untuk menghindari kesalahan verifikasi ssl sebagai solusi cepat.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Tetapi untuk lingkungan produksi Anda, jangan menerapkan dengan perbaikan mudah ini. Ini akan menyebabkan Anda masalah keamanan karena transfer data akan transparan di antara lapisan jaringan. Lihat bagiannya perbaikan yang tepat dari url berikut:

http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/


25
2018-01-17 14:27



HEI GUYS: SANGAT PENTING! Masalah ini membuat saya gila selama beberapa hari dan saya tidak tahu apa yang terjadi dengan pemasangan curl & openssl saya. Saya akhirnya tahu bahwa itu adalah sertifikat INTERMEDIATE saya (dalam kasus saya, GoDaddy) yang ketinggalan zaman. Saya kembali ke panel admin SSL godaddy saya, mengunduh sertifikat perantara baru, dan masalah ini hilang.

Saya yakin ini adalah masalah bagi sebagian dari Anda.

Rupanya, GoDaddy telah mengubah sertifikat perantara mereka di beberapa titik, karena masalah scurity, karena mereka sekarang menampilkan peringatan ini:

"Pastikan untuk menggunakan sertifikat intermediate SHA-2 baru yang termasuk dalam bundel yang Anda unduh."

Semoga ini membantu sebagian dari Anda, karena saya menjadi gila dan ini membersihkan masalah pada SEMUA server saya ...


2
2017-11-13 07:25



Jika sertifikat SSL tidak diinstal dengan benar di sistem Anda, Anda mungkin mendapatkan kesalahan ini:

kesalahan cURL 60: Masalah sertifikat SSL: tidak dapat memperoleh penerbit lokal   sertifikat.

Anda dapat menyelesaikan masalah ini sebagai berikut:

Unduh file dengan daftar sertifikat terbaru dari https://curl.haxx.se/ca/cacert.pem

Pindahkan unduhan cacert.pem file ke beberapa lokasi aman di sistem Anda

Perbarui php.ini file dan konfigurasikan path ke file itu:


1
2017-09-29 06:59



Jangan gunakan solusi ini dalam produksi! Gunakan hanya untuk tujuan pengembangan

Saya menemukan jawaban, Anda perlu menonaktifkan verifikasi SSL:

// create curl resource
$ch = curl_init();

// set url
curl_setopt($ch, CURLOPT_URL, $url);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

// $output contains the output string
$output = curl_exec($ch);
if ( ! $output) {
    print curl_errno($ch) .': '. curl_error($ch);
}

// close curl resource to free up system resources
curl_close($ch);

return $output;

dan itu berfungsi dengan baik! Terima kasih semuanya :)


-5
2018-01-17 14:29