OpenSSL: конвертация сертификата PKCS#12 в PEM

PKCS12 это специальный бинарный формат контейнера для хранения криптографических ключей. По сути, это такой зашифрованный архив.

Допустим у нас есть контейнер PKCS12 с сертификатом и приватным ключом — container.p12
Чтобы открыть этот контейнер потребуется ввести пароль — Enter Import Password:

Конвертация PKCS#12 в PEM

PEM это тоже формат контейнера криптографических ключей, только в текстовом виде.

openssl pkcs12 -in container.p12 -out cert-and-key.pem -nodes

Экспорт сертификата и ключа в отдельные файлы

openssl pkcs12 -in container.p12 -out public-crt.pem -clcerts -nokeys
openssl pkcs12 -in container.p12 -out private-key.pem -nocerts -nodes

Теперь имеем два разных файла:

  • public-crt.pem — публичный сертификат
  • private-key.pem — закрытый ключ в открытом виде (!)

Шифрование ключа при экспорте

Обратите внимание, параметр -nodes обозначает "no DES", т.е. отключение шифрования ключа. Если его убрать, то будет запрошен пароль (pass phrase) для шифрования приватного ключа.

openssl pkcs12 -in container.p12 -out private-key.pem -nocerts 

Пароль к контейнеру PKCS12 из командной строки

Если нужно сразу передать пароль к контейнеру, то добавьте параметр -passin

openssl pkcs12 -in container.p12 -out public.crt -clcerts -nokeys -passin 'pass:P@s5w0rD'

Источник