Cara mengekspor rantai sertifikat CA dari PFX dalam format PEM tanpa atribut tas

31

Saya memiliki file PKCS12 yang berisi rantai sertifikat lengkap dan kunci pribadi. Saya perlu memecahnya menjadi 3 file untuk suatu aplikasi. 3 file yang saya butuhkan adalah sebagai berikut (dalam format PEM):

  • file kunci yang tidak dienkripsi
  • file sertifikat klien
  • file sertifikat CA (root dan semua perantara)

Ini adalah tugas umum yang harus saya lakukan, jadi saya sedang mencari cara untuk melakukan ini tanpa mengedit output secara manual.

Saya mencoba yang berikut ini:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain -out <cacerts.cer>

Ini berfungsi dengan baik, bagaimanapun, output mengandung atribut bag, yang tidak diketahui oleh aplikasi.

Setelah beberapa pencarian saya menemukan solusi yang disarankan untuk melewatkan hasil melalui x509 untuk menghapus atribut tas.

openssl x509 -in <clientcert.cer> -out <clientcert.cer>

Ini berfungsi, tapi saya mengalami masalah pada file cacert. File output hanya berisi salah satu dari 3 sertifikat dalam rantai.

Apakah ada cara untuk menghindari menyertakan atribut bag dalam output dari perintah pkcs12, atau cara untuk memiliki output perintah x509 termasuk semua sertifikat? Selain itu, jika menjalankannya melalui x509 adalah solusi paling sederhana, apakah ada cara untuk menyalurkan output dari pkcs12 ke x509 alih-alih menulis file dua kali?

BryKKan
sumber

Jawaban:

36

Solusi yang akhirnya saya dapatkan adalah menyalurkannya melalui sed.

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>
BryKKan
sumber
Terima kasih! Ini menghemat waktu saya hari ini! ;-)
Jim P.
Terima kasih banyak!
PaulJ