Конвертируем PFX в KEY и CRT

Конвертация PFX в KEY и CRT может потребоваться в том случае, если вы используете какое-либо unix/linux-приложение с поддержкой доступа по SSL. Чаще всего это веб-приложения. В противовес этому подходу Windows использует сертификаты в формате .pfx для хранения пары закрытый-открытый ключи враз, разумеется с защитой паролем при попытке экспорта.

Регулярно приходится работать с сертификатами и процесс конвертации PFX (PKCS12) в KEY и CRT (PEM) встречается с завидной регулярностью. Которой, тем не менее, не достаточно, чтобы запомнить все нужные команды до автоматизма. Приходится постоянно лезть в маны или в гугл за нужными ключами. Уже давно пришло время написать статью-шпаргалку по этой теме. Собственно, вот и она.

Воспользуемся всем знакомой утилитой openssl, чтобы вытащить открытую часть pfx-сертификата:

openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out certificate.crt

Нужно будет ввести пароль, который вы указывали при экспорте .pfx-сертификата. Теперь попробуем извлечь закрытую часть сертификата, поместив её в отдельный запароленный файл:

openssl pkcs12 -in certificate.pfx -nocerts -out key-encrypted.key

После выполнения команды вам придется ввести не только пароль, который использовался для экспорта .pfx-сертификата, но и новый пароль, необходимый для защиты .key-файла. Далее вы вполне можете использовать все полученные ранее файлы сертификата для настройки какого-либо сервиса, использующего SSL. Например Apache (см. секцию ниже в качестве примера).

Закрытый ключ сертификата с парольной защитой не всегда удобно использовать на реальном окружении. Например тот же Apache будет спрашивать пароль при каждом рестарте сервиса, что будет требовать человеческого участия. Обойти проблему можно, сняв пароль с закрытого ключа:

openssl rsa -in key-encrypted.key -out key-decrypted.key

Будьте крайне осторожны в этом случае, чтобы не допустить компрометацию закрытого ключа. Установите на файл соответствующие права, чтобы никто кроме вас не имел к нему доступ:

chmod 600 key-decrypted.key

Ну а теперь рассмотрим обратную процедуру.

KEY и CRT в PFX

Сшивание двух файлов ключей — открытого и закрытого — может потребоваться для сервисов на базе Windows, которые привыкли видеть сертификаты в формате .pfx. Также в некоторых случаях хранить пары ключей удобнее именно в формате pfx.

Примечание: если вы генерировали csr-запрос на стороне сервера Windows, то вам придется его завершить, подсунув файл .crt, который вам позже пришлет ваш ЦС. В итоге экспортировать сертификат из оснастки MMC вы сможете именно в формате .pfx. Иной вариант — если csr создавался с помощью утилиты openssl. В этом случае вероятно у вас уже будут crt и key, которые потребуется собрать в pfx.

Собрать crt и key в pfx можно командой:

openssl pkcs12 -inkey certificate.key -in certificate.crt -export -out certificate.pfx

Как только нажмете Enter, нужно будет ввести пароль от файла закрытого ключа (если этот пароль есть), а также пароль для экспорта в pfx. После этого смело используйте файл на серверах Windows, но не забудьте при импорте отметить ключ экспортируемым (иначе экспортировать ключ потом не получится).

Похожие записи