Преобразование сертификатов crt в pfx и не только

Что такое pfx

Добрый день уважаемые читатели, в прошлый раз я вам рассказывал, о том, что такое csr запрос и мы его генерировали на IIS сервере, далее нам его нужно было передать в удостоверяющий центр для выпуска основного сертификата сервера, мы выбрали для этих целей сертификат comodo на 3 года от компании Emaro. Все замечательно, сертификат прислали, но есть одно, но, когда вы попытаетесь импортировать сертификат в формате crt в IIS сервере, то получите предложение, только на импорт pfx формата, и если его нет, то ошибку, что сертификат не содержит закрытого ключа. Давайте смотреть как это решить.

Для чего нужно преобразование сертификатов

Тут ответ, очень простой, все дело в формате работы с ними у каждой программы, будь то IIS или же Apache сервер. Более подробно про виды сертификатов и их назначение, я вам посоветую прочитать вот эту статью.

Давайте я подробнее покажу как выглядит ошибка импортирования сертификата. Во-первых, когда вы получаете от comodo ваш архив с сертификатами, то там будет два файла:

  • с расширением .ca-bundle
  • с расширением .crt

crt сертификат comodo

Попытавшись на сервере IIS произвести их импорт вы увидите вот такую картинку.

Сертификат не содержит закрытого ключа

сертификат не содержит закрытого ключа

Тут нет ничего удивительного, так как ваш архив еще должен содержать файл key с закрытым ключом, чаще всего он идет в виде текстового файла.

Если вам не передали файл с форматом key, то сходите с этим вопросом к поставщику услуг

Архив для создания pfx шаблона

Какие бывают типы сертификатов

  • Формат PFX (Personal Information Exchange Format), или PKCS#12, является контейнером для хранения пары ключей (открытого и закрытого ключа) вместе с цифровым сертификатом. Используется для экспорта и импорта сертификатов между системами. Удобно, что может содержать в себе всю цепочку сертификатов в виде одного архива. Можно устанавливать защиту с помощью пароля. Воспринимается большинством веб-сервисов.
  • Файлы CER содержат цифровой сертификат, представленный в двоичном виде DER (Distinguished Encoding Rules). Используется преимущественно для распространения открытых ключей без предоставления закрытых ключей. Распространяется свободно, так как не содержит конфиденциальной информации.
  • CRT (.crt) - Это аналог формата CER, но в кодировке Base64 ASCII (PEM format). Формат CRT широко распространён среди Unix-подобных операционных систем и веб-серверов. Представляет открытый ключ, удобен для просмотра содержимого сертификата простым открытием файла.
  • KEY (.key) - Этот файл хранит закрытый ключ в текстовом формате Base64 (PEM). Закрытые ключи необходимы для расшифровки сообщений, подписанных соответствующим открытым ключом. Должен храниться строго в тайне от посторонних лиц. Используется совместно с файлами .crt/.cer для установки SSL/TLS соединений.
  • BUNDLE (.bundle) - часто представляет собой архив, содержащий набор файлов (сертификаты, ключи, цепочки доверия). Они удобны для переноса конфигурации системы безопасности целиком, особенно при наличии промежуточных удостоверяющих центров (Intermediate CA).
  • P7B (.p7b) - Формат PKCS #7 цифровых сертификатов в бинарном виде. Используется для передачи цепочки сертификатов без включения приватных ключей. Хранит только сертификаты и цепочки сертификации. Применяется преимущественно в Windows-контекстах для публикации публичных сертификатов.
  • PEM (Privacy Enhanced Mail) — универсальный формат хранения сертификатов и ключей, использующий кодировку Base64. Позволяет хранить как открытые, так и закрытые ключи, а также связывать сертификаты и ключи в одном файле. Широко поддерживается в различных приложениях и платформах (например, Linux/Unix, Apache, Nginx). Может содержать один или несколько сертификатов, ключи, запросы на подпись и другие элементы инфраструктуры открытого ключа.

PFX: Контейнер для открытой и закрытой части сертификата, поддерживает экспорт и импорт сертификатов.

CER: Бинарный формат сертификата, содержащий только открытую часть.

CRT: Публичный сертификат в текстовом формате (Base64).

KEY: Файл, хранящий закрытый ключ.

BUNDLE: Архив, объединяющий несколько сертификатов и ключей.

P7B: Цепочка сертификатов без частных ключей, используемая в Windows.

PEM: Универсальный текстовый формат, подходящий для хранения как сертификатов, так и ключей.

Как получить PFX из установленного сертификата в Windows

Предполагается, что у вас есть уже установленный в систему сертификат, и вы хотели бы выгрузить его в PFX формат. Нажимаем сочетание клавиш WIN+R и вводим mmc, для вызова оснастки. Я вам уже рассказывал о ее применении и удобстве для системного администратора.

Вызов mmc консоли

Далее вам необходимо через меню "Файл" добавить новую оснастку.

Добавление оснастки сертификаты компьютера

Находим сертификаты и нажимаем кнопку "Добавить"

добавление оснастки сертификаты

В следующем окне выбираем "для учетной записи компьютера"

сертификаты компьютера windows

подтверждаем, что нас интересует локальный компьютер.

локальное хранилище сертификатов

Далее находим пункт "Запросы заявок на сертификат", тут вы обнаружите ваш запрос, находите его и через правый клик экспортируете его.

Запросы заявок на сертификат

У вас откроется мастер экспорта сертификатов

Мастер экспорта сертификатов

Далее вы выбираете "Да, экспортировать закрытый ключ"

Экспорт закрытого ключа

Если ключ помечен как не экспортируемый, то это можно попытаться обойти

Ставим галку "Включить по возможности все сертификаты в путь сертификации" и начинаем наш экспорт PFX архива.

Экспорт pfx сертификата

Теперь мастер экспорта, просит вас указать два раза нужный вам пароль, для защиты pfx архива.

задаем пароль на сертификат

Через кнопку обзор, указываем место сохранения вашего файла.

указываем место pfx файла

Нажимаем "Готово"

экспорт pfx

Как видим, все успешно выгружено.

экспортированный pfx файл

Варианты конвертации pfx сертификата в другие форматы через OpenSSL в Windows

Как я выше писал у вас в архиве должны быть файлы вот таких форматов, чтобы иметь возможность из них делать PFX, либо из них получать нужные форматы через утилиту OpenSSL:

  • с расширением .ca-bundle
  • с расширением .crt
  • key

Скачать OpenSSL для Windows x64 - https://cloud.mail.ru/public/MZmy/yKvJkc7Ad

В итоге у вас будет архив, распакуйте его куда вам будет угодно. Далее выберите вашу папку, зажмите SHIFT и щелкните по ней правым кликом, в открывшемся контекстном меню, выберите пункт "Открыть окно команд".

openssl в windows

В результате чего у вас откроется командная строка Windows, но уже в нужной папке содержащей утилиту openssl.exe, она нам и поможет все сделать красиво.

Преобразование PFX в PEM

Теперь приступаем к получению фала в формате Pem. Положите в папку с дистрибутивом файл в формате pfx.

openssl.exe pkcs12 -in "имя вашего pfx файла" -nocerts -out key.pem

Мой пример:

openssl.exe pkcs12 -in api.pyatilistnik.ru.pfx" -nocerts -out key.pem

Вас попросят указать пароль от Pfx архива, вы его задавали при экспорте, после чего нужно придумать пароль на pem файл.

pft to pem

В папке с дистрибутивом OpenSSL вы обнаружите файл key.pem, он нам нужен будет для следующего этапа.

Преобразование PFX в PEM

Преобразование PEM в KEY

Теперь получим файл с расширением key, для этого есть вот такая команда:

openssl rsa -in key.pem -out <путь к вашему файлу key>

Мой пример:

openssl rsa -in key.pem -out api.pyatilistnik.ru.key

Вас попросят указать пароль от pem ключа.

Преобразование PEM в KEY

В итоге я получил закрытый ключ в формате key.

Еще у вас может возникнуть ошибка: unable to load Private Key
31320:error:0909006C:PEM routines:get_name:no start line:crypto/pem/pem_lib.c:745:Expecting: ANY PRIVATE KEY

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

Unable to load Private Key

Если у вас есть файл с csr запросом, ты вы его можете просто переделать из текущего расширения в key

PEM to KEY

Осталась финишная прямая.

Преобразование PFX в CRT

Иногда нужно из pfx получать crt, для этого воспользуйтесь такой конструкцией:

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

Где брать key-файл

Для того чтобы получить файл в формате key, вам просто нужно изменить расширение текстового файла содержащего закрытый ключ с txt на key, клавишей F2 и сохранить его.

Где брать key-файл

Как создать PFX для импорта в IIS

Теперь когда у вас есть все составляющие, вы можете выполнить последнюю команду для создания PFX файла для IIS сервера.

openssl pkcs12 -export -out doman_com.pfx -inkey doman_com.key -in doman_com.crt -certfile doman_com.ca-bundle

Мой пример:

openssl.exe pkcs12 -export -out api.pyatilistnik.ru.pfx -inkey api.pyatilistnik.ru.key -in api.pyatilistnik.ru.crt -certfile api.pyatilistnik.ru.ca-bundle

источник: https://medium.com/@thylux/how-to-create-csr-and-private-key-from-iis-3965191d67fe

Задаем пароль для pfx файла, потребуется при импортировании.

PFX ключ для импорта в IIS

В итоге вы получаете нужный вам файл, который можно загружать на ваш почтовый сервер.

полученный pfx

Что делать если нет сертификата в запросах заявок на сертификат

Бывают ситуации, что на вашем сервере по каким-то причинам, в папке запросы на сертификат, может не оказаться вашего, в этом случае вам необходимо будет перейти в этой же mmc в раздел "Личное-Сертификаты". Выбираем нужный и делаем экспорт.

Или вы можете просто открыть существующий CRT и в нем так же выгрузить P7B, это не потребует установку crt

экспорт в p7b

Появится мастер экспорта сертификатов.

мастер экспорта p7b

Обратите внимание, что в pfx выгрузить не получится, но это не страшно, нам подойдет и p7b, но с включенной галкой "Включить по возможности все сертификаты в путь сертификации"

p7b в pfx

Указываем путь сохраняемого файла.

p7b в pem

Видим, что все успешно выполнено.

полученный файл p7b

Преобразование p7b в pem

Попробует такое преобразование.

openssl pkcs7 -in cert.p7b -inform DER -print_certs -out cert.pem

Мой пример

openssl.exe pkcs7 -in new.pyatilistnik.ru.p7b -inform DER -print_certs -out new.pyatilistnik.ru.pem

p7b to pem-2

В итоге я получил файл new.pyatilistnik.ru.pem

p7b to pem

Ну, а дальше уже по инструкции сверху. Если у вас выскочит ошибка, по типу

C:\AMD64-Win64OpenSSL-0_9_8g>openssl.exe rsa -in new.pyatilistnik.ru.pem -out new.
pyatilistnik.ru.key
unable to load Private Key
6944:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib
.c:647:Expecting: ANY PRIVATE KEY

То наш вариант это .crt в .der и уже .der в .pem

Преобразование CRT в PEM

Кладем так же все в одну папку, файл crt вам должны были прислать вместе с ca-bundle.

Первое это crt в der

openssl x509 -in new.pyatilistnik.ru.crt -out new.pyatilistnik.ru.der -outform DER

Теперь der в pem.

openssl x509 -in new.pyatilistnik.ru.der -inform DER -out new.pyatilistnik.ru.pem -outform PEM

crt в der

В итоге у меня получилось, вот так.

der в pem

Как создать .ca-bundle

Если у вас нет в наличии отдельного файла с расширением .ca-bundle, то создать его очень просто. Вам должны были прислать несколько файлов в формате crt, от корневого и промежуточного центра сертификации. Посмотреть это можно в общем crt файле на вкладке "Путь сертификации".

путь сертификации

В моем примере, корневым является DIGI, а промежуточным Thawte. При желании вы можете их выбрать и скопировать в виде файла формата crt. Откроем их с помощью блокнота. По сути создание .ca-bundle подразумевает объединение содержимого этих двух файлов цепочки. Это можно сделать через создание нового текстового файла и добавление в него данной информации с последующим изменением расширения txt на .ca-bundle или выполнить команду.

состав crt файлов

Вот так выглядит команда по созданию .ca-bundle файла.

copy intermediate_pem_thawte_sslwildcard_1.crt + root_pem_thawte_sslwildcard_1.crt pyatilistnik.ca-bundle

создание .ca-bundle

Оцените статью
Настройка серверов windows и linux
Добавить комментарий

  1. chastener

    Мега статья, спасибо!!

  2. Андерсон

    Где Вы берете готовые бинарники open ssl для windows? У Вас в облаке старая версия, допустим хочу по новее, где мне найти? Всю сеть перерыл, нет в таком готовом виде как у Вас, везде исходники которые хрен знает как собирать нужно. Или дайте рецепт как вы получаете такие бинарники. Заранее спасибо!

  3. Александр

    Здравствуйте.
    У меня есть два файла: .cet, .key.
    В первом файле 3 секции, во втором одна.
    При команде openssl — export из этих двух файлов получаю pfx. Загружаю его в IIS. Запускаю текст разными ssl checker’aми и вижу, что в отчетах отображается не вся цепочка. Такое ощущение, что при экпорте openssl взял только одну(но не взял корневые центры) секцию из файла .cer. Сертификат от let’s.

  4. Иван Семин автор

    Так есть официальный сайт, где можно скачать актуальные версии OpenSSL под Windows.