Mengapa saya tidak bisa memverifikasi rantai sertifikat ini?

16

Saya memiliki tiga sertifikat dalam sebuah rantai:

  • root.pem
  • intermediate.pem
  • john.pem

Ketika saya memeriksa mereka menggunakan openssl x509 -in [filename] -text -nooutmereka 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

Jong Bor
sumber
Harap hapus jawaban Anda, ini informasi yang salah!
Johannes Pille
1
@JohannesPille Selesai, terima kasih atas informasinya
Jong Bor
Kudos untuk benar-benar melakukannya dan reaksi cepat.
Johannes Pille

Jawaban:

14

Anda tidak harus menggabungkan kedua sertifikat untuk memverifikasinya.

Jika Anda memiliki tiga sertifikat berikut:

  • root.pem - menyimpan sertifikat yang ditandatangani sendiri.
  • intermediate.pem - menyimpan sertifikat yang ditandatangani oleh root.pem
  • john.pem - menyimpan sertifikat yang ditandatangani oleh intermediate.pem

Dan Anda hanya mempercayai root.pem, maka Anda akan memverifikasi john.pemdengan perintah berikut:

openssl verify -CAfile root.pem -untrusted intermediate.pem john.pem

Jika Anda memiliki banyak perantara, Anda hanya bisa rantai -untrusted intermediate2.pem -untrusted intermediate3.pem ...

antiduh
sumber
Ini. Apakah satu-satunya jawaban yang benar.
Johannes Pille
Saya berpikir bahwa jika saya memiliki Sertifikat CA Menengah dan Root dalam bundel opensslakan 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?
FilBot3
Kalimat terakhir dari jawaban ini salah. Jika Anda memiliki banyak perantara, Anda perlu menyatukannya menjadi satu file perantara kemudian menggunakan untrustedbendera satu kali. Menggunakan bendera yang tidak dipercaya beberapa kali tidak berhasil.
AjaxLeung
1
@AjaxLeung - keduanya -untrustedopsi ganda (dalam urutan apa pun) atau -untrustedopsi tunggal yang menunjuk ke bundel perantara (digabung dalam urutan apa pun) berfungsi. Ini dengan OpenSSL versi 1.1.1c di Ubuntu.
garethTheRed
Ya saya salah. Saya pikir saya tidak menggunakan file yang tepat pada saat saya menulis komentar.
AjaxLeung
3

apa yang dikatakan @antiduh hanya berfungsi untuk satu kasus sertifikat perantara antara untuk saya. Dengan menambahkan lebih dari satu -untrusted intermediate.pempada perintah sepertinya tidak berfungsi. Tidak yakin apakah itu terkait dengan versi openssl tertentu.

Menurut dokumen openssl: [ https://linux.die.net/man/1/verify]

file -rustrusted

File sertifikat yang tidak dipercaya. File tersebut harus berisi beberapa sertifikat

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.pemworks for me.

Tampaknya juga dalam ekstensi ca Anda perlu mengatur basicConstraints = CA:truekalau tidak saya masih menemukan openssl memverifikasi kesalahan laporan.

Yang Xu
sumber