Как экспортировать цепочку сертификатов CA из PFX в формате PEM без атрибутов мешка

31

У меня есть файл PKCS12, содержащий полную цепочку сертификатов и закрытый ключ. Мне нужно разбить его на 3 файла для приложения. Мне нужно 3 файла (в формате PEM):

  • незашифрованный ключевой файл
  • файл сертификата клиента
  • файл сертификата CA (root и все промежуточные)

Это обычная задача, которую я должен выполнить, поэтому я ищу способ сделать это без какого-либо ручного редактирования вывода.

Я попробовал следующее:

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>

Это работает нормально, однако, вывод содержит атрибуты мешка, с которыми приложение не знает, как обращаться.

После некоторых поисков я нашел решение передать результаты через x509, чтобы убрать атрибуты пакета.

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

Это работает, но я столкнулся с проблемой в файле cacert. Выходной файл содержит только один из 3 сертификатов в цепочке.

Есть ли способ избежать включения атрибутов bag в выходные данные команды pkcs12 или способ, чтобы выходные данные команды x509 включали все сертификаты? Кроме того, если запуск через x509 является самым простым решением, есть ли способ передать выходные данные из pkcs12 в x509 вместо записи файла дважды?

BryKKan
источник

Ответы:

36

Решение, к которому я наконец пришел, состояло в том, чтобы передать это через 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
источник
Благодарность! Это сэкономило мне время сегодня! ;-)
Джим П.
Большое спасибо!
PaulJ