Katakanlah sebuah situs web adalah load-seimbang antara beberapa server. Saya ingin menjalankan perintah untuk menguji apakah itu berfungsi, seperti curl DOMAIN.TLD
. Jadi, untuk mengisolasi setiap alamat IP, saya menentukan IP secara manual. Tapi banyak situs mungkin di-host di server, jadi saya masih memberikan header host, seperti ini: curl IP_ADDRESS -H 'Host: DOMAIN.TLD'
. Dalam pemahaman saya, kedua perintah ini membuat permintaan HTTP yang sama persis. Satu-satunya perbedaan adalah bahwa pada yang terakhir saya mengambil bagian pencarian DNS dari cURL dan melakukan ini secara manual (perbaiki saya jika saya salah).
Sejauh ini semuanya baik-baik saja. Tetapi sekarang saya ingin melakukan hal yang sama untuk url HTTPS. Sekali lagi, saya bisa mengujinya seperti ini curl https://DOMAIN.TLD
. Tapi saya ingin menentukan IP secara manual, jadi saya jalankan curl https://IP_ADDRESS -H 'Host: DOMAIN.TLD'
. Sekarang saya mendapatkan kesalahan CURL:
curl: (51) SSL: certificate subject name 'DOMAIN.TLD' does not match target host name 'IP_ADDRESS'.
Tentu saja saya bisa menyiasati hal ini dengan mengatakan CURL untuk tidak peduli dengan sertifikat (opsi "-k") tetapi itu tidak ideal.
Apakah ada cara untuk mengisolasi alamat IP yang terhubung dari host yang disertifikasi oleh SSL?
Host
header, jadi--resolve
cara yang tepat untuk menyematkan alamat IP.Jawaban:
Rasanya saya menemukan solusi melalui manual CURL:
dari CURLOPT_RESOLVE menjelaskan
sumber
curl -v
dan Anda dapat melihat bahwa curl menambahkan opsi tekankan ke temporari cache DNS, dan menambahkan menggunakan alamat IP yang Anda tentukan.IP_ADDRESS
, itu akan diam-diam mengabaikan opsi.Anda dapat mengubah di / etc / hosts untuk membuat server berpikir bahwa domain tersebut terletak pada IP tertentu.
Ini adalah sintaks:
Ini akan membuat cURL menggunakan alamat IP yang Anda inginkan tanpa merusak sertifikat SSL.
sumber
Ini adalah
man
entri untuk jawaban yang paling banyak dipilih saat ini karena mereka hanya menyertakan tautan ke komponen program:Tetapi karena batasan yang diberikan ("Ini berarti Anda memerlukan beberapa entri jika Anda ingin memberikan alamat untuk host yang sama tetapi port yang berbeda."), Saya akan mempertimbangkan opsi lain yang lebih baru yang dapat menerjemahkan keduanya sekaligus:
sumber
Jika Anda menjalankan curl di Windows, gunakan tanda kutip ganda
Anda dapat melewati skema / protokol di depan, tetapi Anda tidak dapat melewatkan nomor port di string --resolve.
sumber