Pkcs12 как создать windows

Обновлено: 03.07.2024

Разговор о центре сертификации логично начать с PKI — инфраструктуры открытых ключей. Находим определение в Википедии: «PKI — набор средств (технических, материальных, людских и т. д.), распределённых служб и компонентов, в совокупности используемых для поддержки криптозадач на основе закрытого и открытого ключей». Так что к PKI стоит относиться именно как к инфраструктуре, в состав которой входят те или иные компоненты.

По сути, PKI представляет собой систему, которая используется для создания, хранения и распределения цифровых сертификатов. Они, в свою очередь, должны максимально защищённым образом удостоверять, что определённый публичный ключ принадлежит той или иной сущности.

В качестве сущности может выступать пользователь, устройство или что угодно ещё, что можно ассоциировать с тем или иным ключом (процесс, программа, производитель и т. д.). Вот примеры задач, для которых обычно используется PKI:

  • создание сертификатов для привязки публичного ключа к сущности;
  • безопасное хранение сертификатов в репозитории (англ. repository — хранилище);
  • отзыв сертификата (отметка, что сертификату нельзя доверять).

В систему PKI обычно входят:

  • Центр сертификации (англ. Certificate Authority (CA)), которому будет посвящена основная часть этой статьи. Он непосредственно работает с сертификатом — выписывает, хранит, проверяет подлинность. Центр сертификации не следует путать с удостоверяющим центром. Также отдельно рассматривается «корневой центр сертификации» — сторона, чья честность неоспорима, а открытый ключ широко известен.
  • Регистрационный центр (англ. Registration Authority (RA)). Согласно Википедии, «удостоверяющий центр доверяет регистрационному проверку информации о субъекте». Поэтому часто регистрационный центр полностью или частично объединяют с CA.
  • Сертификат (англ. Certificate) — публичный ключ и идентификаторы сущности, имеющие подпись центра сертификации. В качестве идентификатора может выступать электронная почта пользователя. Если ЦС подписывает набор данных, который состоит из имени пользователя, его публичного ключа и электронной почты, то он как бы гарантирует, что эти данные подлинные. Далее под термином «сертификат» мы будем понимать сертификат стандарта X.509.
  • Certificate Signing Request (CSR). По сути это запрос на подпись сертификата. В запросе обычно указывается сущность, её параметры и публичный ключ.
  • Certificate Revocation List (CRL), он же список отзывов, или отозванных сертификатов. По этому списку ЦС ведёт учёт «плохих» сертификатов. И если такой сертификат используется, то ЦС не подтвердит к нему доверие. Чаще всего причина — утрата ключей сертификата.

Для базового понимания структуры PKI этого списка достаточно. Теперь рассмотрим, как всё это применяется.

Центры сертификации: как они используются

Задача центра сертификации — подтверждать подлинность ключей шифрования с помощью сертификатов электронной подписи. Логику работы ЦС, как правило, можно описать тезисом «никто не доверяет друг другу, но все доверяют ЦС».

Допустим, условная сущность Аlice имеет сертификат, подписанный ЦС Comp, а сущность Bob пытается проверить подлинность этого сертификата. Проверка будет успешной, если Bob и Alice доверяют одному и тому же ЦС. Для решения такой проблемы в ОС Alice и ОС Bob установлено множество сертификатов различных ЦС.

Рассмотрим, как браузер реагирует на разные сертификаты. У Firefox, например, для идентификации есть такой набор сертификатов ЦС:



Если открыть подробности, то можно увидеть почему:

  • в системе были соответствующие корневые сертификаты ЦС, которые будут использоваться для подтверждения сертификата конкретного сайта;
  • у выданных для сайтов сертификатов не было ошибок.


Если открыть дополнительные сведения (что я всегда советую делать), то можно подробнее узнать о проблеме. Здесь видно, что на сайте установлен самоподписанный сертификат, то есть не подписанный каким-либо другим сертификатам. Его подлинность нельзя проверить, и соединение считается недоверенным.


А вот пример для сайта, у которого истёк срок действия сертификата:


Как проверяется доверие на практике?

Для каждого сертификата в соответствии с его назначением определяется хранилище в системе — туда его можно установить вручную. Например, есть хранилище доверенных сертификатов: если поместить в него сертификат, то система будет доверять ему.

В Windows сертификаты можно просмотреть через оснастку certmgr.msc:


Если поместить сертификат в хранилище «Доверенные корневые центры сертификации», то такому центру система будет доверять. А поскольку это хранилище корневых центров сертификации, система потом будет доверять и всем объектам, которые подписаны этим сертификатом.

В ОС Ubuntu Linux сертификаты хранятся в каталоге /etc/ssl/cetrs. Причём часть из них — ссылки на другой объект:


Разворачиваем собственный ЦС

Чтобы лучше понять все процессы, лежащие в основе PKI, рассмотрим на практике развёртывание небольшого ЦС на виртуальной машине под управлением Ubuntu 18 (без выхода в глобальную сеть). Мы не будем жёстко придерживаться правил и стандартов выдачи сертификатов — просто разберём работу с ними.


Начальные настройки

Сперва заполним файл /root/.rnd, который используется как источник начальных случайных значений в генераторе псевдослучайных чисел OpenSSL. Суть использования этого файла описана на сайте OpenSSL. Нам надо заполнить свой файл случайными данными, как вариант — скопировав из /dev/urandom 32768 байт в файл .rnd таким образом:


Далее создадим сертификат для CA:


Опции для сертификата берутся из файла /etc/ssl/openssl.cnf. Сам файл довольно большой, мы не будем приводить здесь его содержимое. В реальности стоит создать свой конфигурационный файл с необходимыми опциями и блоками — и использовать его для генерации сертификатов.

На выходе получим два файла: ключ и сертификат.


Оба файла надо беречь. Если они попадут к злоумышленнику, он сможет использовать их для генерации сертификатов. Посмотреть сертификат можно при помощи этой команды (вывод обрезан для краткости):


Далее на основе полученного сертификата (напомним, что это сертификат корневого CA) можно сгенерировать сертификат для сервера. Вначале генерируем закрытый ключ для сервера:


Теперь используем этот ключ для генерации запроса на выдачу сертификата (CSR):


Отметим, что данные, которые вы вводите в поля, должны совпадать со значениями в тех полях, что указывались при создании сертификата корневого сервера. Теперь возьмём корневой сертификат CA и запрос — и сгенерируем на их основе сертификат для сервера:


Должно получиться 5 файлов.


Файл server.req можно удалить — а при необходимости создать заново. Теперь надо перенастроить веб-сервер для работы с сертификатами.

Настройка Apache 2 для использования сертификатов

Переходим в каталог /etc/apache2:

Создаём каталог для хранения сертификатов:

Включаем модуль SSL для веб-сервера. Тестирование проводилось на ОС Ubuntu Linux, поэтому модуль достаточно просто включить:

Аналогично нужно включить поддержку заголовков:

Теперь создадим конфигурационный файл для модуля SSL. Пример содержимого для него можно взять на Syslink.pl. Команды такие:

Сам файл будет содержать следующие параметры (чтобы было проще работать, мы отключили заголовки Strict-Transport-Securrity, X-Frame-Options и X-Content-Type-Options):


Далее созданный конфиг надо активировать:

Теперь переходим в каталог /etc/apache2/sites-available:

И делаем на всякий случай резервные копии всех хранящихся там файлов:

Теперь ещё раз проверяем подключённые модули headers и SSL:


Далее нам надо перенести созданные сертификаты (сертификат CA и сертификат сервера) в каталог /etc/ssl/certs, а ключ сертификата сервера — в каталог /etc/ssl/private:

Далее откроем конфиг сайта (/etc/apache2/sites-available/000-default-ssl.conf) и добавим туда следующие опции:

Теперь перезагружаем веб-сервер:

Проверяем доступность сайта:


Видим, что Firefox не может проверить сертификат сайта. Чтобы смог, надо импортировать цепочку сертификатов, подтверждающих сертификат сервера, в список доверенных. Создадим цепочку:

У полученного файла не забываем сменить атрибуты на 555:


Теперь откроем в браузере менеджер сертификатов и импортируем полученную цепочку (кнопка Import):


Далее можно просмотреть сертификаты и настроить доверие — вдруг что-то упущено:


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


Сейчас время настроить аутентификацию для клиентов.

Настройка аутентификации клиентов

Веб-сервер Apache поддерживает аутентификацию клиента. Это значит, что мы можем выписать клиенту сертификат SSL, а сервер сможет его проверить. Если у пользователя не будет сертификата — аутентификация не пройдёт. Для активации такой возможности надо добавить в конфиг default-ssl.conf такие опции:

После этого к сайту сможет подключиться только тот пользователь, сертификат которого:

  • установлен в браузере, если клиентом является браузер, — тогда сертификат будет предъявлен при подключении к серверу;
  • подписан сертификатом доверенного УЦ.

Сначала сгенерируем сертификат для клиента. Первым делом создаём ключ:

Затем на основе ключа сгенерируем CSR:

Теперь на базе запроса сгенерируем сам сертификат:

И импортируем сертификат в формате p12:

В итоге у нас должен получиться файл client.p12. Нужно поменять права на файл, иначе сертификат не импортируется:


Теперь можно импортировать его в браузер по аналогии с корневыми сертификатами:


После импорта должно получиться примерно так:


После этого перезапускаем веб-сервер и возвращаемся на сайт. Видим окно выбора сертификата того пользователя, которого мы импортировали в браузер:


После выбора сертификата пользователя можно успешно зайти на сайт:


В этой статье мы рассмотрели сборку простейшего ЦС. Его сертификат мы использовали для подтверждения других сертификатов, обеспечив таким образом доверие между всеми участниками. Но в собранной нами системе есть пара существенных недостатков:

  • если пользователей будет больше одного, то мы столкнёмся с проблемами при учёте выдаваемых сертификатов;
  • при настройке ЦС стоит грамотно выбирать параметры для используемых сертификатов, а для этого нужен свой конфигурационный файл.

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

Напоследок предлагаю ряд полезных материалов для изучения:

Источники, которые использовались при подготовке статьи:

Хотите в подробностях изучить работу центров сертификации и другие вопросы информационной безопасности? Тогда приглашаем вас на факультет GeekUniversity!

Генерация самоподписанного сертификата для hpd одной командой

Ниже приведены конкретные этапы создания ключа, которые которые в командах выше происходят в полностью автоматическом режиме.

Генерация секретного ключа RSA (RSA private key)

Дле генерации используется команда:

  • <Key Filename> — название секретного ключа;
  • <Key Size> — длина ключа. Доступные значения: 1024, 2048, 4096.

Генерация запроса на получение сертификата (Certificate Signing Request)

Чтобы получить SSL - сертификат необходимо сгенерировать запрос на получение сертификата (Certificate Signing Request) на сервере. CSR представляет собой зашифрованный текст, содержащий информацию о компании и доменном имени.

В большинстве случаев CSR содержит следующие поля: страна (Country), регион (State/Province), город (Locality/City), организация (Organization), отдел (Organizational Unit) и доменное имя (Common Name). Обратите внимание:

  1. Поле "страна" должно содержать код из двух символов.
  2. Поля "регион" и "город" должны содержать полные названия.
  3. Поле "организация" — полное юридическое название компании или ФИО предпринимателя, если сертификат оформляется на него.
  4. Поле "отдел" — отдел организации, который занимается покупкой сертификата, например "IT".
  5. "Доменное имя" — полное доменное имя, на которое приобретается сертификат.

Команда создания запроса выглядит следующим образом:

  • <Key Filename> — название секретного ключа RSA;
  • <Request Filename> — название файла запроса на получение сертификата.


После ввода команды, запустится интерактивный режим с вопросами о компании, которой выдается сертификат. Отвечая на вопросы, нужно внести информацию о компании.

Создание самозаверенного сертификата (Self-signed public certificate)

  • <Amount days> — количество дней, но которое создается сертификат;
  • <Request Filename> — файл запроса на получение сертификата ( Certificate Signing Request );
  • <Key Filename> — файл, секретный ключ RSA;
  • <Certificate Filename> — название с амозаверенного сертификата (Self-signed public certificate ).

Команда :

Преобразовать клиентский сертификат в PEM-файл можно с помощью следующей команды:

После того, как вы создали сертификат, вам нужно будет загрузить его на сервера Telegram — для этого передайте его в поле certificate метода setWebhook. Это действие обязательно только для самозаверенных сертификатов. Приобретённые за деньги или полученные через certbot сертификаты никуда отправлять не нужно.

OpenSSL

Исполняемые файлы OpenSSL для Windows доступны в сети.

Исходные коды доступны на GitHub и на официальном сайте.

Генерация пары сертификатов

Необходимо использовать YOURPUBLIC.pem в качестве публичного ключа при настройки вебхука.

  • Проверить сертификат можно командой:
  • Конвертация из уже сгенерированного DER:
  • Конвертация из уже сгенерированного PKCS12:

Java keystore

С подробной документацией можно ознакомиться на сайте документации Oracle.

Генерация самозаверенного JKS

Конвертация JKS в PKCS12

Промежуточный этап перед конвертацией в PEM:

Конвертация PKCS12 в PEM

Для этой операции необходим OpenSSL:

Windows

Создание самозаверенного сертификата доступно и стандартными средствами Windows, несмотря на то, что исполняемые файлы OpenSSL для Windows доступны для скачивания.

Для настройки вебхука нужен только публичный ключ.

Создайте файл TEMPLATE.txt с таким содержанием:

Далее выполните в командной строке:

После этого будет создан и установлен самозаверенный сертификат. Для просмотра выполните:

Экспортируем в DER (промежуточный этап перед конвертацией в PEM):

Конвертация в PEM (используется для настройки вебхука):

Удаление сертификата из хранилища:

Экспорт в формат PFX(PKCS12):

С подробной документацией можно ознакомиться на сайте документации Microsoft.

Конвертировать YOURPKCS.pfx в PEM (который включает в себя приватный ключ) лучше делать с помощью OpenSSL:

В качестве графического интерфейса для экспорта публичной части сертификата в PEM можно использовать certmgr.msc.

Сайт про Telegram на русском (неофициальный).

Здесь собраны приложения на базе MTProto, переведена некоторая документация с официального сайта, а также работает Webogram.

После того, как вы создали сертификат, вам нужно будет загрузить его на сервера Telegram — для этого передайте его в поле certificate метода setWebhook. Это действие обязательно только для самозаверенных сертификатов. Приобретённые за деньги или полученные через certbot сертификаты никуда отправлять не нужно.

OpenSSL

Исполняемые файлы OpenSSL для Windows доступны в сети.

Исходные коды доступны на GitHub и на официальном сайте.

Генерация пары сертификатов

Необходимо использовать YOURPUBLIC.pem в качестве публичного ключа при настройки вебхука.

  • Проверить сертификат можно командой:
  • Конвертация из уже сгенерированного DER:
  • Конвертация из уже сгенерированного PKCS12:

Java keystore

С подробной документацией можно ознакомиться на сайте документации Oracle.

Генерация самозаверенного JKS

Конвертация JKS в PKCS12

Промежуточный этап перед конвертацией в PEM:

Конвертация PKCS12 в PEM

Для этой операции необходим OpenSSL:

Windows

Создание самозаверенного сертификата доступно и стандартными средствами Windows, несмотря на то, что исполняемые файлы OpenSSL для Windows доступны для скачивания.

Для настройки вебхука нужен только публичный ключ.

Создайте файл TEMPLATE.txt с таким содержанием:

Далее выполните в командной строке:

После этого будет создан и установлен самозаверенный сертификат. Для просмотра выполните:

Экспортируем в DER (промежуточный этап перед конвертацией в PEM):

Конвертация в PEM (используется для настройки вебхука):

Удаление сертификата из хранилища:

Экспорт в формат PFX(PKCS12):

С подробной документацией можно ознакомиться на сайте документации Microsoft.

Конвертировать YOURPKCS.pfx в PEM (который включает в себя приватный ключ) лучше делать с помощью OpenSSL:

В качестве графического интерфейса для экспорта публичной части сертификата в PEM можно использовать certmgr.msc.

Сайт про Telegram на русском (неофициальный).

Здесь собраны приложения на базе MTProto, переведена некоторая документация с официального сайта, а также работает Webogram.

Читайте также: