Перевод Easy-RSA 3 Quickstart README
2019-10-22
Предисловие от меня
В статье задействован правильный способ использования PKI для OpenVPN, когда операция создания приватных ключей с последующим запросом на сертификацию и операция выпуска сертификата ключа на основе запроса, выполняются на разных системах.
Easy-RSA 3 Quickstart README
Это инструкция как быстро начать использовать Easy-RSA версии 3. Детальный хэлп по использованию и описанию команд может быть найден по команде ./easyrsa -h
. Дополнительная документация может быть найдена в директории doc/
.
Если вы сделали апгрейд с версии Easy-RSA 2.x, то в той же папке doc/
лежат заметки по апгрейду.
Установка и процедура подписи первого запроса
Здесь в быстром темпе описано, что нужно сделать, чтобы развернуть новую PKI (Инфраструктура Открытых Ключей) и выпустить свой первый подписанный сертификат:
-
Выберите систему, которая будет вашим Центром Сертификации (CA), где создайте структуру каталогов для новой PKI и сгенерируйте ключи для этого CA следующими командами:
./easyrsa init-pki
./easyrsa build-ca
-
На другой системе нуждающейся в сертификате, будущем сервере или клиенте, инициализируйте собственный PKI для генерации ключевой пары и запроса на сертификацию. Заметьте, что рекомендованной процедурой является инициализация этого PKI (
init-pki
) на отдельной системе от первой (или хотя бы в отдельном каталоге). Если вы не придерживаетесь рекомендованной процедуры и используете один и тот же каталог для выпуска и подписания сертификатов, то пропустите этотinit-pki
, а так же следующий шаг с описанием импорта запросаimport-req
.
./easyrsa init-pki
./easyrsa gen-req EntityName
-
Скопируйте файл запроса (
.req
) , например, на флэшку для передачи его на систему с CA и там его импортируйте. Имя EntityName, заданное здесь, является произвольным и используется только для именования файла запроса.
./easyrsa import-req /tmp/path/to/import.req EntityName
-
Подпишите запрос с заданием правильного типа,
server
илиclient
. Здесь пример для типа client:./easyrsa sign-req client EntityName
-
Совершите обратный перенос нового подписанного сертификата на систему, нуждавшейся в сертификате. Так же может понадобится перенести сертификат Центра Сертификации (
ca.crt
), если конечно, ранее уже не было произведено его копирование. -
Теперь нуждавшаяся система имеет свою ключевую пару, подписанный сертификат, и сертификат CA.
Подписание следующих запросов
Выполняйте пункты со второго до шестого, чтобы генерировать ключевые пары и получать подписанные сертификаты.
Отзыв сертификатов и создание CRL
Эта задача производится только на CA-системе.
Для отзыва ранее выданного сертификата используйте имя сертификата, использованное в процессе импорта:
./easyrsa revoke EntityName
Для создания обновлённого Списка Отозванных Сертификатов (CRL), который содержит все отозванные сертификаты, выполните:
./easyrsa gen-crl
После процедуры генерации, обновлённый CRL необходимо разослать всем заинтересованным лицам.
Генерация Diffie-Hellman (DH) params
Операция генерации DH-параметра, используемого, кстати, только на стороне сервера в режиме TLS, очень ресурсоёмкая и на неё может быть затрачено несколько минут или даже десятков минут. Поэтому разумнее генерировать DH-param прямо на целевых серверах, дабы избежать бессмысленной траты ресурсов CA-системы. Выполните на целевом сервере openssl dhparam -out dh.pem 2048
. В противном случае можете использовать Easy-RSA, где DH-параметр генерируется командой:
./easyrsa gen-dh
Просмотр информации о запросе или сертификате
Просмотр детальной информации о запросе или сертификате производится нижеследующими командами, которым на вход подаём короткие имена объектов. Очевидно, что без наличия соответствующих файлов запрос информации вызовет ошибку.
./easyrsa show-req EntityName
./easyrsa show-cert EntityName
Изменение пароля приватного ключа
RSA и EC приватные ключи могут быть повторно зашифрованы с новым паролем с помощью одной из следующих команд в зависимости от типа ключа:
./easyrsa set-rsa-pass EntityName
./easyrsa set-ec-pass EntityName
По выбору, пароль может быть вообще убран из ключа с помощью опции nopass
. Смотрите документацию по команде.