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

 #10268   IgorA100
 15 мар 2019, 23:06
Инфраструктура публичных ключей PKI
- Создаем директория для ключей:
Код: Выделить всё# mkdir /etc/openvpn/keys
# cd /etc/openvpn/keys

- Качаем и устанавливаем утилиту "easy-rsa"
Код: Выделить всё# wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
# unzip master.zip
# cd /etc/openvpn/keys/easy-rsa-master/easyrsa3
# cp vars.example vars

- По желанию, правим содержимое файла vars (длину ключей, дефолтные сроки валидности ключей и др.), например:
Код: Выделить всёset_var EASYRSA_KEY_SIZE        4096

set_var EASYRSA_REQ_COUNTRY     "RU"
set_var EASYRSA_REQ_PROVINCE    "NW"
set_var EASYRSA_REQ_CITY        "City"
set_var EASYRSA_REQ_ORG         "Org"
set_var EASYRSA_REQ_EMAIL       "contact@localhost.local"
set_var EASYRSA_REQ_OU          "OU"

set_var EASYRSA_DIGEST          "sha512"

- Создаем инфраструктуру публичных ключей (PKI, Public Key Infrastructure):
Код: Выделить всё# ./easyrsa init-pki

При этом будет создан каталог /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/.

Чтобы при подключении клиентов к серверу OpenVPN можно было бы быть уверенным, что сертификат сервера и клиента - не поддельные, нужен кто-то, кто отвечает за "кристальную чистоту партийных рядов". Этот кто-то - удостоверяющий центр, CA (Certificate Authority). CA бывают свои (чаще самоподписанные) и публичные, типа Thawte, StartSSL и др. В данном примере рассмотрим ситуацию, когда используется свой CA - как минимум, это значительно дешевле. Даже свой CA не обязан быть на том же сервере, где будет запущен сервер OpenVPN, но чаще всего расположение CA для OpenVPN на том же сервере, что и сам OpenVPN.

Создаем свой CA:
Код: Выделить всё# ./easyrsa build-ca

Можно было бы избежать ввода пароля (./easyrsa build-ca nopass), но при этом если кто-то скопирует секретный ключ вашего CA, он сможет подписывать "левые" ключи. Вы должны охранять приватный ключ CA как зеницу ока, ведь все остальное верифицируется именно им. Поэтому пароль должен быть стойким к перебору. В конце концов, вы не каждый день будете им пользоваться.

Итак, у нас появились секретный ключ ca.key и сертификат ca.crt:
/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key
/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/ca.crt

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

Сертификат CA (ca.crt) — открытый, его мы будем вместе с пользовательскими сертификатами передавать клиентам.

Сертификаты сервера OpenVPN

Создаем запрос сертификата для сервера без пароля с помощью опции nopass, иначе придется вводить пароль с консоли при каждом запуске сервера:
Код: Выделить всё# ./easyrsa gen-req NameMyServer nopass


Создание ключа и сертификата для клиента
Точно также начнем с формирования запроса на сертификат:

Код: Выделить всё./easyrsa gen-req user_name nopass

где user_name - имя клиента, а nopass предписывает создать закрытый ключ без пароля.

На основании запроса выпустим сертификат:
Код: Выделить всё./easyrsa sign-req client user_name

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

Для передачи на клиент необходимо скопировать в доступную пользователю директорию закрытый ключ, сертификат клиента и сертификат CA.
Код: Выделить всёcp pki/ca.crt pki/private/user_name.key pki/issued/user_name.crt /home/ххх

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

OpenVPN c расширенной аутентификацией и авторизацией - https://habr.com/ru/post/433250/
OpenVPN-сервер с авторизацией по логину и паролю (с использованием скрипта checkpass.pl) - https://www.ylsoftware.com/news/680
OpenVPN-сервер с авторизацией по логину и паролю, еще вариант - https://skeletor.org.ua/?p=1571
И еще: https://interface31.ru/tech_it/2019/12/ ... rsa-3.html
 #10278   IgorA100
 13 сен 2019, 23:16
Если клиент не может подключиться, а в логах сервера есть такая ошибка:
Код: Выделить всёopenvpn VERIFY ERROR: depth=0, error=CRL has expired:

Значит список CRL отозванных сертификатов просрочен.
Проверить срок действия можно командой:
Код: Выделить всёopenssl crl -inform PEM -in crl.pem -text -noout

Изменить срок действия сертификата можно в файле /etc/openvpn/keys/easy-rsa-master/easyrsa3/vars , переменная "set_var EASYRSA_CERT_EXPIRE 3650"

Обновить список:
Код: Выделить всё# cd /etc/openvpn/easy-rsa
# ./easyrsa gen-crl


Подробнее тут: https://bozza.ru/art-287.html
и тут: https://serveradmin.ru/oshibki-openvpn- ... e-failure/
 #10348   IgorA100
 21 мар 2021, 18:40
ОТЗЫВАЕМ сертификат:
Откроем файл vars, найдем и раскомментируем в нем следующую опцию, которая задает срок действия CRL, по умолчанию установлено 180 дней, укажите нужное вам значение:
Код: Выделить всёset_var EASYRSA_CRL_DAYS 180

Затем сформируем список отозванных сертификатов: (можно в общем-то и не выполнять...)
Код: Выделить всё./easyrsa gen-crl

Итогом выполнения данной команды будет появление файла crl.pem в директории pki.
Для отзыва сертификата выполните (предварительно перейдя в директорию Easy-RSA):
Код: Выделить всё./easyrsa revoke ivanov

В данном случае вам потребуется явно подтвердить отзыв, введя yes на запрос утилиты.
После отзыва сертификата вам потребуется обновить список CRL, для этого еще раз выполните: (а это выполнить ОБЯЗАТЕЛЬНО!!!)
Код: Выделить всё./easyrsa gen-crl


Настройка OpenVPN для работы со списком отозванных сертификатов (CRL)
После того, как вы создали или обновили CRL (файл crl.pem) его следует скопировать в директорию с ключами OpenVPN сервера, это действие следует повторять после каждого отзыва сертификата (и обновления файла crl.pem).
Например:
Код: Выделить всёcp /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki  /etc/openvpn/server/key


Затем откроем конфигурацию сервера OpenVPN и добавим туда директиву, отвечающую за проверку отозванных сертификатов. В Linux:
Код: Выделить всёcrl-verify /etc/openvpn/server/key/crl.pem

После чего обязательно перезапустите службу OpenVPN сервера.
Код: Выделить всёsystemctl restart openvpn@server.service
 #10350   IgorA100
 02 апр 2021, 23:05