Saya memiliki tiga sertifikat dalam sebuah rantai:
- root.pem
- intermediate.pem
- john.pem
Ketika saya memeriksa mereka menggunakan openssl x509 -in [filename] -text -noout
mereka tampak baik-baik saja, root.pem sepertinya ditandatangani sendiri (Penerbit == Subjek), dan Subjek dari setiap sertifikat adalah Penerbit yang berikutnya, seperti yang diharapkan.
Dan memang saya dapat memverifikasi rantai hingga sertifikat perantara:
$ openssl verify -CAfile root.pem root.pem
root.pem: OK
$ openssl verify -CAfile root.pem intermediate.pem
intermediate.pem: OK
Namun, john.pem gagal:
$ openssl verify -CAfile root.pem -CAfile intermediate.pem john.pem
john.pem: C = CL, [...redacted data...]
error 2 at 1 depth lookup:unable to get issuer certificate
Sepengetahuan saya, ini berarti openssl tidak dapat menemukan penerbit untuk intermediate.pem. Itu tidak masuk akal karena root.pem memang penerbit untuk intermediate.pem.
Apa yang saya lewatkan?
Sunting: Saya awalnya mengirim jawaban yang mengatakan bahwa root.pem dan intermediate.pem harus digabung dalam satu file, dan kemudian seseorang harus menggunakan file ini sebagai parameter untuk -CAfile
. Ini SALAH, karena ini secara implisit mempercayai perantara, seperti yang ditunjukkan oleh Johannes Pille . Baca tautan yang diposkannya di jawaban saya yang dihapus: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html
sumber
Jawaban:
Anda tidak harus menggabungkan kedua sertifikat untuk memverifikasinya.
Jika Anda memiliki tiga sertifikat berikut:
Dan Anda hanya mempercayai root.pem, maka Anda akan memverifikasi
john.pem
dengan perintah berikut:Jika Anda memiliki banyak perantara, Anda hanya bisa rantai
-untrusted intermediate2.pem -untrusted intermediate3.pem ...
sumber
openssl
akan mengambilnya dan memverifikasi sertifikat. Apakah ada alasan mengapa hal ini terjadi? Seperti, orang yang menandatangani sertifikat pengguna tidak menandatanganinya dengan perantara tetapi root, atau sesuatu?untrusted
bendera satu kali. Menggunakan bendera yang tidak dipercaya beberapa kali tidak berhasil.-untrusted
opsi ganda (dalam urutan apa pun) atau-untrusted
opsi tunggal yang menunjuk ke bundel perantara (digabung dalam urutan apa pun) berfungsi. Ini dengan OpenSSL versi 1.1.1c di Ubuntu.apa yang dikatakan @antiduh hanya berfungsi untuk satu kasus sertifikat perantara antara untuk saya. Dengan menambahkan lebih dari satu
-untrusted intermediate.pem
pada perintah sepertinya tidak berfungsi. Tidak yakin apakah itu terkait dengan versi openssl tertentu.Menurut dokumen openssl: [ https://linux.die.net/man/1/verify]
Dalam kasus saya, saya memiliki rantai seperti:
root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem
oleh cat intermediate1.pem & intermediate2.pem menjadi file intermediate-chain.pem tunggal dan kemudian jalankan
openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pem
works for me.Tampaknya juga dalam ekstensi ca Anda perlu mengatur
basicConstraints = CA:true
kalau tidak saya masih menemukan openssl memverifikasi kesalahan laporan.sumber