Saya baru mengenal dunia Curl dan Cacerts dan menghadapi masalah saat menyambung ke server. Pada dasarnya, saya perlu menguji konektivitas melalui https dari satu mesin ke mesin lain. Saya memiliki URL yang harus saya sambungkan dari Mesin A (mesin linux). Saya mencoba ini pada prompt perintah
cmd> curl https://[my domain or IP address]
dan mendapatkan yang berikut ini:
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Saat membaca beberapa artikel melalui internet saya melakukan ini:
openssl s_client -connect <domain name or Ip address>:443
dan mendapat beberapa tanggapan termasuk sertifikat server (di dalam -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----
).
Apa yang harus saya lakukan selanjutnya dari sini. Saya pikir, saya hanya perlu menyalin dan menempel teks di dalamnya
BEGIN CERTIFICATE & END CERTIFICATE
dan menyimpannya dalam sebuah file. Tapi, jenis file apa yang seharusnya? .pem
, .crt
? .. Apa yang harus saya lakukan setelah itu?
Saya mencoba ini - menyalin teks di dalamnya BEGIN CERTIFICATE & END CERTIFICATE
dan menyimpannya dalam .crt
file - menamakannya sebagai my-ca.crt
(juga mencoba hal yang sama dengan menamainya sebagai my-ca.pem
file) dan kemudian melakukan ini:
cmd>curl --cacert my-ca.crt https://[my domain or IP address]
Namun mendapat error yang sama.
sumber
--insecure
untuk mengabaikan kesalahan SSL.Jawaban:
Saya mengalami masalah yang sama - saya mengambil halaman dari situs saya sendiri, yang disajikan melalui HTTPS, tetapi curl memberikan pesan "masalah sertifikat SSL" yang sama. Saya mengatasinya dengan menambahkan
-k
bendera ke panggilan untuk memungkinkan koneksi yang tidak aman.Sunting: Saya menemukan akar masalahnya. Saya menggunakan sertifikat SSL (dari StartSSL, tapi menurut saya itu tidak terlalu penting) dan belum menyiapkan sertifikat perantara dengan benar. Jika Anda mengalami masalah yang sama dengan pengguna1270392 di atas, mungkin sebaiknya Anda melakukannya menguji sertifikat SSL Anda dan memperbaiki masalah apa pun sebelum beralih ke
curl -k
perbaikan.sumber
Solusi sederhana
Itu naskah sehari-hari saya:
Keluaran:
sumber
--insecure
koneksi melalui TSL, setiap hari ...Anda harus menyediakan seluruh rantai sertifikat ke curl, karena curl tidak lagi dikirimkan dengan sertifikat CA apa pun. Karena opsi cacert hanya dapat menggunakan satu file, Anda perlu menggabungkan info rantai lengkap menjadi 1 file
Salin rantai sertifikat (dari browser Anda, misalnya) ke biner berenkode DER x.509 (.cer). Lakukan ini untuk setiap sertifikat.
Ubah sertifikat menjadi PEM, dan gabungkan menjadi 1 file.
Saya menulis blog tentang cara melakukan ini di sini: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html
sumber
gunakan
--cacert
untuk menentukan.crt
file.ca-root-nss.crt
sebagai contoh.sumber
Saya sebenarnya memiliki masalah seperti ini dan saya menyelesaikannya dengan langkah-langkah berikut:
Dapatkan bundel sertifikat root CA dari sini: https://curl.haxx.se/ca/cacert.pem dan simpan di lokal
Temukan
php.ini
fileTetapkan
curl.cainfo
menjadi jalur sertifikat. Jadi akan seperti ini:curl.cainfo = /path/of/the/keys/cacert.pem
sumber
Di sini Anda dapat menemukan sertifikat CA dengan instruksi untuk mengunduh dan mengonversi sertifikat CA Mozilla . Setelah Anda mendapatkan
ca-bundle.crt
ataucacert.pem
Anda hanya menggunakan:atau
sumber
setelah mengangkat masalah saya dapat menggunakan file CA default sistem yang ada, di debian6 ini adalah:
sebagai root ini bisa dilakukan seperti:
lalu mulai ulang server web.
sumber
kamu bisa menggunakan ini
curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);
sumber
Bagi saya, saya hanya ingin menguji situs web yang memiliki pengalihan http-> https otomatis. Saya pikir saya sudah menginstal beberapa sertifikat, jadi ini saja berfungsi untuk saya di Ubuntu 16.04 yang sedang berjalan
curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
curl --proto-default https <target>
sumber
Dengan versi modern dari curl, Anda cukup mengganti alamat ip mana yang akan dihubungkan, menggunakan --resolve atau --connect-to (curl lebih baru dari versi 7.49). Ini bekerja bahkan dengan SSL / SNI. Semua detail ada di halaman manual.
Misalnya, untuk menimpa DNS dan menyambung ke www.example.com dengan ssl menggunakan alamat ip tertentu: (Ini juga akan menimpa ipv6)
Contoh lain, untuk menyambung ke server backend tertentu bernama backend1 pada port 8080
Ingatlah untuk menambahkan header host jika server membutuhkannya untuk menjawab dengan benar:
sumber