Thank you for reading this post, don't forget to subscribe!
Сделать файлы CRT и KEY из PFX может потребоваться в том случае, если вы используете какое-либо UNIX/Linux-приложение с поддержкой доступа по SSL. Чаще всего это веб-приложения. В противовес этому подходу Windows использует сертификаты в формате .pfx для хранения пары закрытый-открытый ключи враз, разумеется с защитой паролем при попытке экспорта.
SSL-сертификаты на данный момент распространены повсеместно и работать с ними приходится постоянно.
Если у вас все ещё нет сертификата от публичного ЦС, тогда для этого сначала нужно сделать CSR-запрос. Следующий шаг — отправить его в ЦС и пройти проверку домена/организации (вам отправят письмо с кодом подтверждения на какой-либо админский адрес, либо позвонят на корпоративный номер телефона в зависимости от типа проверки).
Как только все формальности пройдены, на почту вы получите архив с нужным вам сертификатом в формате .crt (и всей цепочкой промежуточных на всякий случай).
CRT и KEY из PFX
Воспользуемся всем знакомой утилитой 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 или Nginx).
Закрытый ключ сертификата с парольной защитой не всегда удобно использовать на реальном окружении. Например тот же 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, но не забудьте при импорте отметить ключ экспортируемым (иначе экспортировать ключ потом не получится).