Далеко не все системы умеют работать с PFX файлами. Особенно это касается *nix систем. Но это даже не недостаток, а просто особенность работы этих систем. Поэтому разделение PFX файла на отдельные файлы с закрытым и открытым ключом (PEM формат) не такая уж и редкая задача. Коснулась она и меня, поэтому, чтобы у меня всегда была шпаргалка под рукой я и решил написать эту статью.
Если у вас стоит обратная задача – конвертирование файла с открытым ключом и закрытым ключом в PFX, то я уже рассказывал как это делается.
Необходимый инструмент (openssl)
оздание PFX сертификата а из PEM сертификата штатными средствами Windows “из коробки” не поддерживается. Соответственно, мы будем использовать сторонее решение – OpenSSL for Windows.
Если вы работаете в *nix системах, т, вероятно, openssl у вас уже установлен.
Переходим по указанной выше ссылки и загружаем дистрибутив программного продукта:

Копия дистрибутива от 03.09.2021 доступна ниже:
Выполняем установку дистрибутива. В случае успешной установки в директории, которую вы указали при установке будет примерно следующий набор файлов:

Разделение PFX файла
Очень кратко покажу что нам нужно сделать (это же все-таки шпаргалка):
1. Сначала извлекем файл закрытого ключа. Обязательно указывыаем пароль для PEM файла.
openssl pkcs12 -in <pfx_file> -nocerts -out <encrypted_key_file>
Пример:
openssl pkcs12 -in _.itproblog.ru.pfx -nocerts -out itproblog.key
roman@mintwks:~$ openssl pkcs12 -in _.itproblog.ru.pfx -nocerts -out itproblog.key
Enter Import Password:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
roman@mintwks:~$
При возникновении ошибки “digital envelope routines:inner_evp_generic_fetch:unsupported” добавьте ключ -legacy в самом конце команды.
2. Теперь извлекем закрытый ключ из зашифрованного PEM файла:
openssl rsa -in <encrypted_key_file> -out <unencrypted_key_file>
Пример:
openssl rsa -in itproblog.key -out itproblog_key.key
roman@mintwks:~$ openssl rsa -in itproblog.key -out itproblog_key.key
Enter pass phrase for itproblog.key:
writing RSA key
roman@mintwks:~$
Примерно так выглядит файл закрытого ключа в PEM формате:

3. Теперь переведем в PEM формат файл сертификата (без закрытого ключа).
openssl pkcs12 -in <pfx_file> -clcerts -nokeys -out <crt_file>
Пример:
openssl pkcs12 -in _.itproblog.ru.pfx -clcerts -nokeys -out itproblog.crt
roman@mintwks:~$ openssl pkcs12 -in _.itproblog.ru.pfx -clcerts -nokeys -out itproblog.crt
Enter Import Password:
roman@mintwks:~$
При возникновении ошибки “digital envelope routines:inner_evp_generic_fetch:unsupported” добавьте ключ -legacy в самом конце команды.
Примерно так выглядит файл открытого ключа в PEM формате:
