Easy-RSA 3 и OpenVPN. Создаем сертификаты.

OpenVPN — популярный сервер для создания VPN-туннелей использующих аутентификацию и шифрование на основе протокола SSL/TLS. Туннели очень часто с одной стороны заканчиваются Mikrotik’ом и логичнее пожалуй генерировать сертификаты «не отходя от кассы», но в случае если туннелей и микротов много, считаю что лучше воспользоваться общим центром сертификации. В этом случае на помощь приходит Easy-RSA. На текущий момент версия 3. Скачать последний релиз можно на Github-странице проекта или установить из репозиториев Ubuntu (18 и выше) и Debian (10 и выше). Я предпочитаю гитхаб.

Создаем центр сертификации

Скачиваем и распаковываем последнию версию пакета. Изменяем рабочую папку на папку приложения и… С дефолтными настройками Easy-RSA готов к работе, но если вы хотете добавить чуть больше подробностей в сертификат необходимо внести правки в файл конфига vars

cp vars.example vars

Откроем файл vars на редактирование и найдем опцию EASYRSA_DN, она предусматривает два режима: упрощенный cn_only, при котором сертификат содержит только CN (имя того, кому выдан сертификат) и стандартный org, при котором заполняются все реквизиты организации. Для OpenVPN можно использовать любой режим. Я выбираю org, после чего убираем # со следующих строк и вносим свои данные:

set_var EASYRSA_DN  "org"
# если вы выбрали cn_only, то редактировать 
# нижеуказанные переменные нет смысла
set_var EASYRSA_REQ_COUNTRY	"UA"
set_var EASYRSA_REQ_PROVINCE	"21"
set_var EASYRSA_REQ_CITY	"Kharkiv"
set_var EASYRSA_REQ_ORG		"MY.ORG.UA"
set_var EASYRSA_REQ_EMAIL	"me@example.net"
set_var EASYRSA_REQ_OU		"peer-network"

Переменная EASYRSA_KEY_SIZE указывает размер ключа, на текущий момент стандартным считается размер начиная с 2048, если нам нужна безопасность — можем увеличить его до 3072 или 4096, но нагрузка на процессор возрастет, а пропускная способность будет ниже. Если же криптографическая стойкость не играет роли, а туннель будет использован для передачи не критичных данных, а также возможно использование слабых устройств, то стоит уменьшить размер до 1024. Осталяю по умолчанию

Переменные EASYRSA_CA_EXPIRE и EASYRSA_CERT_EXPIRE задают срок действия корневого сертификата CA и сертификатов пользователей (сервера и клиентов), устанавливаются в днях, по умолчанию это 3650 (10 лет) и 1080 (5 лет) дней, переменная EASYRSA_CERT_RENEW задает количество дней до истечения сертификата, когда становится доступным его продление, по умолчанию это 30 дней, устанавливаю в 60 и сохраняю файл/

Пришло время инициализировать центр сертификации. Данное действо выполняется один раз и при повторном вводе команды существующий CA будет перевыпущен и прийдется перевыпускать все ключи и сертификаты.

./easyrsa init-pki

Cоздаём файл для генерации случайных данных:

touch pki/.rnd

и активируем наш CA:

./easyrsa build-ca

При создании CA будет предложено ввести пароль — вводим, ибо закрытый ключ — основа инфраструктуры открытых ключей и при его компрометации прийдется начинать все заново. Также указываем собственное название центра сертификации в опции Common Name.

Результатом выполнения этих команд является создание структуры директорий CA, публичный сертификат центра сертификации ca.crt можно найти в папке pki, а закрытый ключ ca.key в pki/private. Закрытый ключ является секретным и не должен покидать свое расположение, доступ для других групп и пользователей к закрытому ключу также следует ограничить.

Сформируем файл параметров Диффи-Хеллмана dh.pem, он тоже будет в папке pki:

./easyrsa gen-dh

Центра сертификации (CA) создан.

Создаем ключ и сертификат для сервера

 Сначала нужно создать запрос на сертификат:

./easyrsa gen-req main-server nopass

где:

  • main-server — имя нашего ovpn сервера,
  • nopass — указывает, что закрытый ключ следует создать без пароля.

При запуске команды будет создан запрос на сертификат и сгенерирован закрытый ключ сервера main-server.key, который будет располагаться в pki/private. Доступ к закрытому ключу также следует ограничить.

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

./easyrsa sign-req server main-server

Опция server обозначает выпуск сертификата для сервера. Для подтверждения выпуска нужно явно выразить свое согласие указав yes в ответ на соответствующий запрос, любый иные действия приведут к отмене действия. И потребуется ввести пароль от закрытого ключа центра сертификации.

Выпущенные сертификаты находятся в pki/issued.

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

mkdir /etc/openvpn/keys
cp pki/ca.crt pki/dh.pem /etc/openvpn/keys
cp pki/private/ovpn-server.key pki/issued/ovpn-server.crt /etc/openvpn/keys

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

Также создаем запрос на сертификат:

./easyrsa gen-req point1 nopass

где:

  • point1 — имя клиента
  • nopass — говорит что создаем закрытый ключ без пароля.

Рекомендую давать клиентам понятные имена, чтобы ориентироваться кто находится за определенным соединением.

Выпускаем сертификат:

./easyrsa sign-req client point1

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

Для передачи клиенту необходимо скопировать в доступную клиенту папку/флешку закрытый ключ, сертификат клиента и сертификат CA.

Списки отзыва и отзыв сертификатов

При использовании OpenVPN для организации связи между офисами вряд ли у вас возникнет потребность в отзыве сертификата. Но, если мы предоставляем удаленный доступ к корпоративной сети, тут может возникнуть ситуацийя когда доступ отдельных лиц следует прекратить.

Создаём список отозванных сертификатов (CRL):

./easyrsa gen-crl

Затем символьную ссылку на список в папке с ключами OpenVPN:

ln -s /opt/easy-rsa/pki/crl.pem /etc/openvpn/keys/

И вносим в конфиг файл сервера OpenVPN строку:

crl-verify keys/crl.pem

После чего сервер OpenVPN нужно перезапустить.

И отзываем какой-либо сертификат:

./easyrsa revoke bad_cert

Где bad_cert — имя сертификата клиента (СN), после отзыва повторно публикуем список отозванных сертификатов:

./easyrsa gen-crl

Посмотреть список сертификатов можно командой:

cat pki/index.txt

Действующие сертификаты имеют статус V в начале строки, отозванные — R

[Голосов: 0 Средний бал: 0]