Назад | Перейти на главную страницу

Упаковка сертификата OpenSSH в pfx

Я хочу упаковать свой сертификат OpenSSH, подписанный центром сертификации, в файл pfx. Из того, что я видел, мне нужен формат моего закрытого ключа и сертификата в PEM. Я использую ssh-keygen для генерации закрытого и открытого ключей rsa. Закрытый ключ уже находится в формате PEM. Когда я создаю сертификат OpenSSH, он находится в формате OpenSSH, а не в кодировке PEM.

Я хочу использовать команду pkcs12 -export для создания пакета pkcs12 моего закрытого ключа и моего сертификата, но в нем говорится, что не удалось загрузить сертификаты.

Я знаю, что мне нужен сертификат в pem, и мне нужно предоставить сертификат CA также в файле -in. Но сертификата нет в PEM, и он не распознает его, даже если я принудительно помещаю его в PEM.

Кто-нибудь когда-нибудь упаковывал сертификат OpenSSH (не x.509), подписанный CA (хотя Selfsigned и у меня тоже не работал) и закрытый ключ к файлу pfx?

Если да, можете ли вы дать точные команды из генерации ключа, включая генерацию сертификата и создание файла pfx?

Заранее спасибо, я искал дни без должного ответа.

OpenSSH и x509 - несовместимые форматы. Вместо этого вы захотите создать закрытый ключ + CSR, используя openssl. После отправки CSR (НЕ ключ!) в ЦС, они вернут подписанный сертификат, который вы можете объединить с вашим закрытым ключом в контейнер pfx.

Чтобы создать ключ

openssl genrsa -out 2019-www_server_com.key 2048

Чтобы создать запрос на подпись сертификата

openssl req -new -key 2019-www_server_com.key -out 2019-www_server_com.csr

Создать контейнер PFX из полученного сертификата и ключа

openssl pkcs12 -export -out 2019-www_server_com.pfx -inkey 2019-www_server_com.key -in yourcertificate.crt

Вкратце, вы можете использовать свой существующий закрытый ключ RSA (я не пробовал другие типы, такие как ECDSA), однако вам нужно сгенерировать сертификат с OpenSSL с соответствующими расширениями X.509, чтобы упаковать его в PFX / PKCS12 файл. Вот что я пробовал, и это сработало:

Сначала создайте CSR, если вы хотите, чтобы ваш сертификат был подписан центром сертификации. Если нет, просто перейдите к следующей команде, чтобы создать самозаверяющий сертификат.

openssl req -key .ssh/id_rsa -new -out .ssh/id_rsa.csr

Примечание: если вы используете парольную фразу для своего ключа SSH, вам будет предложено ввести ее. CSR (запрос на подпись для вашего CA) будет выведен в .ssh. Предполагается, что вы хотите использовать .ssh / id_rsa в качестве личного ключа.

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

openssl req -key .ssh/id_rsa -new -x509 -days 365 -out .ssh/id_rsa.crt

Примечание: приведенная выше команда устанавливает срок действия сертификата на 1 год (365 дней). При необходимости отрегулируйте. Это в значительной степени бесполезно для OpenSSH, поскольку он игнорирует данные x.509, включая истечение срока действия сертификата, если вы захотите отменить этот процесс.

Теперь, когда у вас есть сертификат с правильными метаданными x.509 (id_rsa.crt), вы можете упаковать его вместе с закрытым ключом, как обычно:

openssl pkcs12 -inkey .ssh/id_rsa -in .ssh/id_rsa.crt -export -out .ssh/id_rsa.pfx

Имя файла может быть .pfx или .p12, формат тот же, AFAIK. Обратите внимание, что эта команда сначала запросит у вас пароль закрытого ключа SSH, а затем дважды запросит пароль для экспорта PFX / PKCS12.

Как упоминалось выше, для повторного использования файла PFX / PKCS12 с OpenSSH вам необходимо сначала извлечь и преобразовать закрытый ключ из архива PFX / PKCS12 в формат PEM, а затем использовать ssh-keygen для получения открытого ключа OpenSSH из закрытого ключа. . Я не понимаю, зачем вы все это делаете, но надеюсь, что вышеизложенное было полезно ...

И последнее: я нахожу Руководство DigitalOcean по OpenSSL быть достаточно всеобъемлющим. Он не просто дает вам бессмысленные команды для копирования и вставки, но объясняет, что делает каждая команда.