Cara menggunakan curlopt_ssl_verifyhost php

Dari PHP, Anda dapat mengakses Perpustakaan cURL [libcurl] yang berguna untuk membuat permintaan ke URL menggunakan berbagai protokol seperti HTTP, FTP, LDAP, dan bahkan Gopher. [Jika Anda menghabiskan waktu di baris perintah *nix, sebagian besar lingkungan juga memiliki perintah curl yang menggunakan pustaka libcurl]

Namun dalam praktiknya, protokol yang paling umum digunakan cenderung HTTP, terutama saat menggunakan PHP untuk komunikasi server-ke-server. Biasanya ini melibatkan mengakses server web lain sebagai bagian dari panggilan layanan web, menggunakan beberapa metode seperti XML-RPC atau REST untuk menanyakan sumber daya. Misalnya, Delicious menawarkan API berbasis HTTP untuk memanipulasi dan membaca postingan pengguna. Namun, ketika mencoba mengakses sumber daya HTTPS [seperti API yang enak], ada sedikit konfigurasi yang harus Anda lakukan sebelum Anda dapat membuat cURL berfungsi dengan benar di PHP

Masalah

Jika Anda hanya mencoba mengakses HTTPS [SSL atau sumber daya yang dilindungi TLS] di PHP menggunakan cURL, kemungkinan besar Anda akan mengalami beberapa kesulitan. Katakanlah Anda memiliki kode berikut. [Penanganan kesalahan dihilangkan untuk singkatnya]

// Initialize session and set URL.
$ch = curl_init[];
curl_setopt[$ch, CURLOPT_URL, $url];

// Set so curl_exec returns the result instead of outputting it.
curl_setopt[$ch, CURLOPT_RETURNTRANSFER, true];
    
// Get the response and close the channel.
$response = curl_exec[$ch];
curl_close[$ch];

Jika $url_ mengarah ke sumber daya HTTPS, kemungkinan besar Anda akan menemui kesalahan seperti di bawah ini

Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
_

Masalahnya adalah cURL belum dikonfigurasi untuk mempercayai sertifikat HTTPS server. Konsep sertifikat dan PKI berkisar pada kepercayaan Otoritas Sertifikat [CA], dan secara default, cURL diatur untuk tidak mempercayai CA mana pun, sehingga tidak akan mempercayai sertifikat server web mana pun. Jadi mengapa Anda tidak mengalami masalah saat mengunjungi situs HTTP melalui browser web Anda?

Perbaikan cepat

Ada dua cara untuk mengatasi masalah ini. Pertama, kita cukup mengonfigurasi cURL untuk menerima sertifikat server [peer] apa pun. Ini tidak optimal dari sudut pandang keamanan, tetapi jika Anda tidak menyampaikan informasi sensitif bolak-balik, ini mungkin baik-baik saja. Cukup tambahkan baris berikut sebelum memanggil curl_exec[]

curl_setopt[$ch, CURLOPT_SSL_VERIFYPEER, false];

Ini pada dasarnya menyebabkan cURL menerima sertifikat server apa pun secara membabi buta, tanpa melakukan verifikasi apa pun tentang CA mana yang menandatanganinya, dan apakah CA itu dipercaya atau tidak. Jika Anda benar-benar khawatir tentang data yang Anda berikan atau terima dari server, Anda harus mengaktifkan verifikasi rekan ini dengan benar. Melakukannya sedikit lebih rumit

Perbaikan yang tepat

Perbaikan yang tepat melibatkan pengaturan parameter CURLOPT_CAINFO. Ini digunakan untuk menunjuk ke sertifikat CA yang harus dipercaya oleh cURL. Dengan demikian, setiap sertifikat server/peer yang dikeluarkan oleh CA ini juga akan dipercaya. Untuk melakukan ini, pertama-tama kita perlu mendapatkan sertifikat CA. Dalam contoh ini, saya akan menggunakan https. //api. del. ini. kami/server sebagai referensi

Pertama, Anda harus mengunjungi URL dengan browser web untuk mendapatkan sertifikat CA. Kemudian, [di Firefox] buka detail keamanan situs dengan mengklik dua kali ikon gembok di pojok kanan bawah

Kemudian klik "Lihat Sertifikat"

Buka tab "Detail" pada halaman sertifikat, dan pilih sertifikat di bagian atas hierarki. Ini adalah sertifikat CA

Kemudian klik "Ekspor", dan simpan sertifikat CA ke lokasi yang Anda pilih, pastikan untuk memilih X. 509 Certificate [PEM] sebagai jenis/format penyimpanan

Sekarang kita perlu memodifikasi pengaturan cURL untuk menggunakan sertifikat CA ini, dengan CURLOPT_CAINFO diatur ke titik tempat kita menyimpan file sertifikat CA

curl_setopt[$ch, CURLOPT_SSL_VERIFYPEER, true];
curl_setopt[$ch, CURLOPT_SSL_VERIFYHOST, 2];
curl_setopt[$ch, CURLOPT_CAINFO, getcwd[] . "/CAcerts/BuiltinObjectToken-EquifaxSecureCA.crt"];

Opsi lain yang saya sertakan, CURLOPT_SSL_VERIFYHOST dapat diatur ke nilai bilangan bulat berikut

  • 0. Jangan centang atribut nama umum [CN].
  • 1. Periksa apakah atribut nama umum setidaknya ada
  • 2. Periksa apakah nama umum ada dan cocok dengan nama host server

Jika Anda memiliki

Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
0 disetel ke false, maka dari sudut pandang keamanan, tidak masalah apa yang Anda setel CURLOPT_SSL_VERIFYHOST ke, karena tanpa verifikasi sertifikat rekan, server dapat menggunakan sertifikat apa pun, termasuk yang ditandatangani sendiri yang dijamin untuk memiliki CN yang cocok dengan nama host server. Jadi pengaturan ini benar-benar hanya relevan jika Anda telah mengaktifkan verifikasi sertifikat

Ini memastikan bahwa tidak sembarang sertifikat server akan dipercaya oleh sesi cURL Anda. Misalnya, jika penyerang entah bagaimana mengalihkan lalu lintas dari api. lezat. com ke server mereka sendiri, sesi cURL di sini tidak akan diinisialisasi dengan benar, karena penyerang tidak akan memiliki akses ke sertifikat server [i. e. tidak akan memiliki kunci privat] yang dipercaya oleh CA yang kami tambahkan. Langkah-langkah ini secara efektif mengekspor CA tepercaya dari browser web ke konfigurasi cURL

Informasi lebih lanjut

Jika Anda memiliki sertifikat CA, tetapi tidak dalam format PEM [mis. e. itu dalam format biner atau DER yang tidak disandikan Base64], Anda harus menggunakan sesuatu seperti OpenSSL untuk mengubahnya menjadi format PEM. Perintah persisnya berbeda tergantung pada apakah Anda mengonversi dari format PKCS12 atau DER

Ada opsi

Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
_2 yang memungkinkan Anda menentukan direktori yang menyimpan beberapa sertifikat CA untuk dipercaya. Tapi itu tidak sesederhana membuang setiap sertifikat CA di direktori ini. Sebagai gantinya, sertifikat CA mereka harus diberi nama dengan benar, dan utilitas OpenSSL
Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
3 dapat digunakan untuk mengatur direktori ini dengan benar untuk digunakan oleh cURL

Apa itu Curl_setopt?

curl_setopt [$ch, CURLOPT_RETURNTRANSFER, 1]; . Skrip cURL di atas bertujuan untuk menampilkan konten halaman dari URL https. //bak pasir.

Apa itu PHP Curl?

Client URL atau biasa disingkat cURL , adalah proyek open source berupa program yang menjalankan di baris perintah [CMD], tetapi saat ini ada perpustakaan yang tersedia di banyak bahasa pemrograman ​​seperti PHP , Python, dan masih banyak lagi.

Tulis langkah-langkah pemasangan Curl?

Cara Memasang dan Menggunakan cURL di Windows .
Unduh cURL di curl. se/windows/. .
Ekstrak cURL yang Anda unduh sebelumnya. .
Untuk dapat menggunakan Command Prompt [cmd] kita perlu memasukkan cURL ke dalam path terlebih dahulu. .
Setelah itu pilih Variabel Lingkungan

Apa itu api cURL?

Curl adalah “alat baris perintah untuk mentransfer data yang ditentukan dengan sintaks URL”, yang berguna untuk berinteraksi dengan REST API dan sumber daya situs lainnya.

Bài mới nhất

Chủ Đề