Saya sedang membangun rantai sertifikat sendiri dengan komponen berikut:
Root Certificate - Intermediate Certificate - User Certificate
Root Cert adalah sertifikat yang ditandatangani sendiri, Sertifikat Menengah ditandatangani oleh Root dan Pengguna oleh Menengah.
Sekarang saya ingin memverifikasi apakah Sertifikat Pengguna memiliki jangkar oleh Root Certificate.
Dengan
openssl verify -verbose -CAfile RootCert.pem Intermediate.pem
validasinya ok. Pada langkah berikutnya saya memvalidasi Sertifikat Pengguna dengan
openssl verify -verbose -CAfile Intermediate.pem UserCert.pem
dan validasi menunjukkan
error 20 at 0 depth lookup:unable to get local issuer certificate
Apa yang salah?
sumber
man verify
, saya menemukan bahwa-untrusted
parameter adalah yang benar untuk digunakan ketika menentukan sertifikat perantara.-untrusted
tidak memeriksa apakah rantai sertifikat sepenuhnya valid. Harap pertimbangkan untuk meneruskan perintah perantara dan root ke perintah seperti yang-CAfile
disarankan pertanyaan lain.openssl verify -CAfile /usr/local/etc/openssl/cert.pem -untrusted Intermediate.pem UserCert.pem
Itulah salah satu dari sedikit pekerjaan yang sah untuk
cat
:Memperbarui:
Seperti yang ditunjukkan Greg Smethells dalam komentar, perintah ini secara implisit mempercayai Intermediate.pem . Saya sarankan membaca bagian pertama dari posting referensi Greg (bagian kedua secara khusus tentang pyOpenSSL dan tidak relevan dengan pertanyaan ini).
Jika posting hilang, saya akan mengutip paragraf penting:
Tampaknya openssl akan berhenti memverifikasi rantai segera setelah sertifikat root ditemukan, yang mungkin juga Intermediate.pem jika ditandatangani sendiri. Dalam hal ini RootCert.pem tidak dipertimbangkan. Jadi pastikan Intermediate.pem berasal dari sumber yang tepercaya sebelum mengandalkan perintah di atas.
sumber
Masalahnya adalah, itu
openssl -verify
tidak melakukan pekerjaan.Seperti yang disebutkan Priyadi ,
openssl -verify
berhenti pada sertifikat yang ditandatangani sendiri pertama, maka Anda tidak benar-benar memverifikasi rantai, karena seringkali sertifikat perantara ditandatangani sendiri.Harap dicatat bahwa jawaban Peter benar , namun hasil dari
openssl -verify
tidak ada petunjuk bahwa semuanya benar-benar berfungsi sesudahnya. Ya, mungkin menemukan beberapa masalah, tetapi tidak semua.Berikut ini adalah skrip yang melakukan pekerjaan untuk memverifikasi rantai sertifikat sebelum Anda menginstalnya ke dalam Apache. Mungkin ini dapat ditingkatkan dengan beberapa keajaiban OpenSSL yang lebih mistik, tetapi saya bukan guru OpenSSL dan karya-karya berikut:
Ada GitHub Gist ini yang mungkin memiliki beberapa pembaruan
Prasyarat skrip ini:
/etc/ssl/certs
seperti biasa misalnya di UbuntuDIR
tempat Anda menyimpan 3 file:DIR/certificate.crt
yang berisi sertifikatDIR/certificate.key
yang berisi kunci rahasia untuk layanan web Anda (tanpa frasa sandi)DIR/certificate.bundle
yang berisi CA-Bundle. Tentang cara menyiapkan bundel, lihat di bawah../check DIR/certificate
(ini mengasumsikan bahwa skrip dinamaicheck
dalam direktori saat ini)CA-Bundle is not needed
. Ini berarti bahwa Anda (baca/etc/ssl/certs/
:) sudah mempercayai sertifikat penandatanganan. Tapi ini sangat tidak mungkin di WWW.Bagaimana cara membuat
certificate.bundle
file?Di WWW rantai kepercayaan biasanya terlihat seperti ini:
/etc/ssl/certs
certificate.crt
)Sekarang, evaluasi berlangsung dari bawah ke atas, ini berarti, pertama, sertifikat Anda dibaca, maka sertifikat perantara yang tidak diketahui diperlukan, kemudian mungkin sertifikat penandatanganan silang dan kemudian
/etc/ssl/certs
dikonsultasikan untuk menemukan sertifikat tepercaya yang tepat.Bundel harus dibuat dalam urutan pemrosesan yang tepat, ini berarti, sertifikat yang diperlukan pertama (sertifikat perantara yang menandatangani sertifikat Anda) datang terlebih dahulu dalam bundel. Maka lintas-penandatanganan sertifikat diperlukan.
Biasanya CA Anda (otoritas yang menandatangani sertifikat Anda) akan sudah menyediakan file ca-bundle yang tepat. Jika tidak, Anda harus memilih semua sertifikat perantara yang diperlukan dan
cat
semuanya menjadi satu file (pada Unix). Di Windows, Anda cukup membuka editor teks (sepertinotepad.exe
) dan menempelkan sertifikat ke dalam file, yang pertama diperlukan di atas dan mengikuti yang lain.Ada satu hal lagi. File harus dalam format PEM. Beberapa CA mengeluarkan format DER (biner). PEM mudah dikenali: ASCII dapat dibaca. Untuk lebih lanjut tentang cara mengubah sesuatu menjadi PEM, lihat Cara mengkonversi .crt ke .pem dan ikuti jalan bata kuning.
Contoh:
Kamu punya:
intermediate2.crt
sertifikat lanjutan yang menandatanganicertificate.crt
intermediate1.crt
sertifikat perantara lain, yang dinyanyikanintermediate2.crt
crossigned.crt
yang merupakan sertifikat penandatanganan silang dari CA lain, yang ditandatanganiintermediate1.crt
crossintermediate.crt
yang merupakan perantara lain dari CA lain yang menandatanganicrossigned.crt
(Anda mungkin tidak akan pernah melihat hal seperti itu)Maka yang tepat
cat
akan terlihat seperti ini:Dan bagaimana Anda bisa mengetahui file mana yang dibutuhkan atau tidak dan dalam urutan apa?
Nah, bereksperimen, sampai
check
memberitahu Anda semuanya baik-baik saja. Ini seperti permainan puzzle komputer untuk memecahkan teka-teki itu. Setiap. Tunggal. Waktu. Bahkan untuk pro. Tetapi Anda akan menjadi lebih baik setiap kali Anda perlu melakukan ini. Jadi, Anda pasti tidak sendirian dengan semua rasa sakit itu. Ini SSL, Anda tahu? SSL mungkin adalah salah satu desain terburuk yang pernah saya lihat dalam lebih dari 30 tahun administrasi sistem profesional. Pernah bertanya-tanya mengapa crypto belum menjadi arus utama dalam 30 tahun terakhir? Itu sebabnya. kata Nuff.sumber
Saya harus melakukan verifikasi sertifikat allowencrypt dan saya melakukannya seperti ini:
Terbitkan perintah ini:
sumber
Setelah menghabiskan satu hari penuh pada masalah yang sama persis, tanpa pengetahuan sebelumnya tentang sertifikat SSL, saya mengunduh CERTivity Keystores Manager dan mengimpor keystore saya ke sana, dan mendapatkan visualisasi yang jelas dari rantai sertifikat.
Tangkapan layar:
sumber
openssl verify
.Jika Anda hanya ingin memastikan bahwa penerbit dari
UserCert.pem
sebenarnyaIntermediate.pem
melakukan hal berikut (contoh penggunaan:OpenSSL 1.1.1
):dan Anda akan mendapatkan:
atau
sumber
openssl verify -no-CAfile -no-CApath -partial_chain -trusted Intermediate.pem UserCert.pem
di Python 3.7?Anda dapat dengan mudah memverifikasi rantai sertifikat dengan openssl. Fullchain akan menyertakan sertifikat CA sehingga Anda harus melihat detail tentang CA dan sertifikat itu sendiri.
openssl x509 -di fullchain.pem -teks -tidak
sumber