Curl: Masalah sertifikat SSL, verifikasi bahwa sertifikat CA adalah OK
07 April 2006
Saat membuka url aman dengan Curl Anda mungkin mendapatkan kesalahan berikut:
Masalah sertifikat SSL, verifikasi bahwa sertifikat CA OK
Saya akan menjelaskan mengapa kesalahan dan apa yang harus Anda lakukan.
Cara termudah untuk menghilangkan kesalahan adalah menambahkan dua baris berikut ke skrip Anda. Solusi ini menimbulkan risiko keamanan.
//WARNING: this would prevent curl from detecting a 'man in the middle' attack
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
Coba lihat apa yang dilakukan kedua parameter ini. Mengutip manual.
CURLOPT_SSL_VERIFYHOST : 1 untuk memeriksa keberadaan nama umum dalam sertifikat rekan SSL. 2 untuk memeriksa keberadaan nama umum dan juga memverifikasi bahwa itu cocok dengan nama host yang disediakan.
CURLOPT_SSL_VERIFYPEER : FALSE untuk menghentikan CURL dari memverifikasi sertifikat rekan. Sertifikat alternatif untuk diverifikasi dapat ditentukan dengan opsi CURLOPT_CAINFO atau direktori sertifikat dapat ditentukan dengan opsi CURLOPT_CAPATH. CURLOPT_SSL_VERIFYHOST mungkin juga harus TRUE atau FALSE jika CURLOPT_SSL_VERIFYPEER dinonaktifkan (standarnya adalah 2). Mengatur CURLOPT_SSL_VERIFYHOST ke 2 (Ini adalah nilai default) akan menjamin bahwa sertifikat yang disajikan kepada Anda memiliki 'nama umum' yang cocok dengan URN yang Anda gunakan untuk mengakses sumber daya jarak jauh. Ini adalah pemeriksaan yang sehat tetapi tidak menjamin program Anda tidak ditipu.
Masukkan 'pria di tengah'
Program Anda dapat disesatkan untuk berbicara dengan server lain sebagai gantinya. Ini dapat dicapai melalui beberapa mekanisme, seperti dns atau keracunan arp (Ini adalah cerita untuk hari lain). Penyusup juga dapat menandatangani sendiri sertifikat dengan 'nama bersama' yang sama dengan yang diharapkan oleh program Anda. Komunikasi masih akan dienkripsi tetapi Anda akan memberikan rahasia Anda kepada penipu. Serangan semacam ini disebut 'man in the middle'
Mengalahkan 'pria di tengah'
Ya, kita perlu memverifikasi bahwa sertifikat yang diberikan kepada kita itu benar-benar baik. Kami melakukan ini dengan membandingkannya dengan sertifikat yang kami percayai * masuk akal.
Jika sumber daya jarak jauh dilindungi oleh sertifikat yang dikeluarkan oleh salah satu CA utama seperti Verisign, GeoTrust et al, Anda dapat dengan aman membandingkan dengan bundel sertifikat CA Mozilla yang bisa Anda dapatkan dari
http://curl.haxx.se/docs/caextract .html
Simpan file cacert.pem
di suatu tempat di server Anda dan atur opsi berikut dalam skrip Anda.
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");