Создание самоподписных сертификатов

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

Для чего такие сертификаты нужны? В основном мне требуются такие сертификаты для использования в различных VPN туннелях таких как IPSEC или OpenVPN, но использование PKI инфраструктуры (инфраструктуры открытых ключей) этим не ограничивается, подробнее о PKI можно узнать здесь.
В интернете существует масса статьей о том каким способом можно создать самоподписной сертификат, но все эти статьи сложны для запоминания и требуют знания аргументов openssl, а их там довольно много, я пару раз пробовал, иногда получалось =) Но позже когда я стал изучать вопрос создания OpenVPN туннелей я открыл для себя более простой способ – с помощью утилит входящих в комплект OpenVPN, об этом и пойдёт речь ниже.

установка необходимого по

Статья периодически обновляется, поэтому скриншоты могут быть сделаны в разное время, но они всегда отражают суть того что нужно сделать, на небольшие несоответствия, например в размере ключа сертификата можно просто не обращать внимания

Итак сначала нам необходим скачать сам пакет, он находится на сайте OpenVPN.net в разделе community (community downloads). Для написания примера была использована Windows 8.1, но как вы понимаете аналогичные действия можно проделать на любой другой ОС Windows начиная с 2000.

в моём случае это Windows Installer 64-bit (битность выбирайте в зависимости от вашей ОС).

openvpn install windows
Начинаем установку

openvpn install components
Если вы хотите установить OpenVPN только для создания самоподписных сертификатов то выбираем только те пункты которые отмечены на скриншоте выше, если же вам нужен будет и сам OpenVPN отмечайте все пункты.

подготовка

Заходим в папку с программой и находим там папку easy-rsa, поскольку мы будем тренироваться, да и вообще на будущее, рекомендую скопировать папку например в easy-rsa-название, в моём случае это будет easy-rsa-cmp.

Переходим в эту папку, там есть файл Readme в котором описано всё что нужно сделать, но ридми как водится у нас никто не читает, поэтому продолжу описание.

Для начала переименовываем файл vars.bat.sample в vars.bat и редактируем его (правой кнопкой мыши – изменить)

Содержание файла примерно следующее:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@echo off
rem Edit this variable to point to
rem the openssl.cnf file included
rem with easy-rsa.
 
rem Automatically set PATH to openssl.exe
FOR /F "tokens=2*" %%a IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN"') DO set "PATH=%PATH%;%%b\bin"
 
rem Alternatively define the PATH to openssl.exe manually
rem set "PATH=%PATH%;C:\Program Files\OpenVPN\bin"
 
rem тут мы прописываем адрес нашей папки, папку то мы скопировали
set HOME=%ProgramFiles%\OpenVPN\easy-rsa-cmp
set KEY_CONFIG=openssl-1.0.0.cnf
set KEY_DIR=keys
 
set DH_KEY_SIZE=2048
rem Private key size
set KEY_SIZE=4096
 
rem В этом блоке можно ничего и не менять, но я поменяю :)
rem Эта информация будет предлагаться для заполнения по умолчанию
set KEY_COUNTRY=RU
set KEY_PROVINCE=KRD
set KEY_CITY=Krasnodar
set KEY_ORG=CMP
rem тут в общем можно и свой емайл указать
set KEY_EMAIL=support@cmp.local
rem дальше ничего не меняем
set KEY_CN=changeme
set KEY_NAME=changeme
set KEY_OU=changeme
set PKCS11_MODULE_PATH=changeme
set PKCS11_PIN=1234

Файл затем надо будет сохранить, если у вас включён UAC (а по умолчанию он включён) сначала сохраните файл на рабочий стол, а потом скопируйте его в папку easy-rsa-cmp

CMD

на этом подготовительный этап завершён и мы приступаем к работе с батниками через командную строку.

В windows с uac жмём пуск и набираем cmd далее правой кнопкой мышки и запустить от имени администратора. В появившемся окошке набираем cd “адрес нашей папки easy-rsa”. Если в адресе есть пробелы набираем адрес в двойных кавычках. Если пробелов нет кавычек можно не ставить. В windows без uac или с выключенным uac пуск – выполнить – cmd (win+r – cmd). Для удобства адрес сначала можно скопировать в адресной строке проводника, и затем вставить. В моём случае команда выглядит как cd “C:\Program Files\OpenVPN\easy-rsa-cmp” жмём интер.

Затем набираем vars , жмём интер окно cmd не закрываем до полной генерации всех сертификатов.

Eсли же вдруг окно закрыли, то перед тем как продолжать что-либо не забывайте каждый раз набирать vars, эта команда выполняется каждый раз перед тем как вы захотите что-либо сделать, она задаёт переменные, которые сохраняются пока открыто окно командной строки

После выполнения команды vars набираем clean-all и опять таки интер.

Clean-all выполняется всего один раз. Эта команда стирает папку с ключами и сертификатами и/или создаёт заново необходимые для генерации файлы. Поэтому рекомендую быть крайне внимательными к этой команде.

следующий этап создание – Root CA
набираем build-ca и жмём интер, отвечаем на вопросы и переходим к созданию сертификата для сервера

Если появляется ошибка “openssl” не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
В vars.bat пишем rem вначале строки 7 и удаляем rem вначале строки 10. Запускаем vars.bat ещё раз.

build-ca
команда build-key-server имя_сертификата и снова отвечаем на вопросы. Обращаю внимание что поле commonName должно быть уникальным и не совпадать не с одним другим сертификатом.
build-key-server

Обратите внимание на поле commonName, это поле должно быть уникальным. Именно это поле определяет имя сертификата.

Следующий шаг создание сертификата клиента
команда build-key имя_сертификата и отвечаем на вопросы

build-key

the end

Вот и всё. Созданные сертификаты и ключи к ним лежат в папке keys.

ca.crt – открытый сертификат Root CA, можно распространять свободно.
ca.key – закрытый ключ сертификата.

Имея закрытый ключ можно создавать сертификаты подписанные этим ключом. Поэтому ни в коем случае не передавайте никому закрытый ключ Root CA.


test-server.crt – открытый сертификат сервера;
test-server.key – закрытый ключ сервера;

test-client.crt – открытый сертификат клиента;
test-client.key – закрытый ключ клиента.

Остальные файлы интереса особого для нас не представляют.

На этом всё, как обычно вопросы и пожелания можно оставлять в комментариях ниже.