Конвертация PFX в KEY и CRT может потребоваться в том случае, если вы используете какое-либо unix/linux-приложение с поддержкой доступа по SSL. Чаще всего это веб-приложения. В противовес этому подходу Windows использует сертификаты в формате .pfx для хранения закрытого и открытого ключа враз, разумеется с защитой паролем при попытке экспорта.
Регулярно приходится работать с сертификатами и процесс конвертации PFX (PKCS12) в KEY и CRT (PEM) встречается с завидной регулярностью. Которой, тем не менее, не достаточно, чтобы запомнить все нужные команды до автоматизма. Приходится постоянно лезть в маны или гугл за нужными командами. Уже давно пришло время написать статью-шпаргалку. Собственно, вот и она.
Хочется задать вопросы или поделиться знаниями? Приходи в наш закрытый Telegram-чат.
Конвертируем PFX
В статье я рассмотрю лишь базовые сценарии, которые встречаются наиболее часто.
Получаем сертификат
Если у вас все ещё нет сертификата от публичного ЦС, тогда мы идем к вам то самое время его получить. Обычно для этого сначала нужно сделать CSR-запрос. Следующий шаг – отправить его в ЦС и пройти проверку домена/организации (вам отправят письмо с кодом подтверждения на какой-либо админский адрес, либо позвонят на корпоративный номер телефона в зависимости от типа проверки).
Как только все формальности пройдены, на почту вы получите архив с нужным вам сертификатом в формате .crt (и всей цепочкой промежуточных на всякий случай).
PFX в KEY и CRT
Воспользуемся всем знакомой утилитой openssl, чтобы вытащить открытую часть pfx-сертификата 1:
1 |
openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out certificate.crt |
Нужно будет ввести пароль, который вы указывали при экспорте .pfx-сертификата. Теперь попробуем извлечь закрытую часть сертификата, поместив её в отдельный запароленный файл:
1 |
openssl pkcs12 -in certificate.pfx -nocerts -out key-encrypted.key |
После выполнения команды вам придется ввести не только пароль, который использовался для экспорта .pfx-сертификата, но и желательно новый пароль, необходимый для защиты .key-файла.
Далее можно использовать полученные сертификаты для настройки какого-либо сервиса, использующего SSL. Например Apache (в качестве примера кусок конфигурации ниже):
1 2 3 4 |
SSLEngine on SSLCertificateFile /etc/ssl/crt/cert.crt SSLCertificateKeyFile /etc/ssl/crt/private.key SSLCertificateChainFile /etc/ssl/crt/chain.crt |
Закрытый ключ сертификата с парольной защитой не всегда удобно использовать на реальном окружении. Например тот же Apache будет спрашивать пароль при каждом рестарте сервиса, что будет требовать человеческого участия. Обойти проблему можно, сняв пароль с закрытого ключа:
1 |
openssl rsa -in key-encrypted.key -out key-decrypted.key |
На всякий случай установите на файл соответствующие права, чтобы никто кроме вас не имел к нему доступ:
1 |
chmod 600 key-decrypted.key |
Ну а теперь рассмотрим обратную процедуру.
KEY и CRT в PFX
Сшивание двух файлов ключей – открытого и закрытого – может потребоваться для сервисов на базе Windows, которые привыкли видеть сертификаты в формате .pfx. Также в некоторых случаях хранить пары ключей удобнее именно в формате pfx.
Собрать crt и key в pfx можно командой:
1 |
openssl pkcs12 -inkey certificate.key -in certificate.crt -export -out certificate.pfx |
Как только нажмете Enter, нужно будет ввести пароль от файла закрытого ключа (если этот пароль есть), а также пароль для экспорта в pfx. После этого смело используйте файл на серверах Windows, но не забудьте при импорте отметить ключ экспортируемым (иначе экспортировать ключ потом не получится).
Если вдруг возникают сложности с Linux, то вы всегда можете обратиться ко мне за помощью.