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

 #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


OpenVPN c расширенной аутентификацией и авторизацией - https://habr.com/ru/post/433250/
OpenVPN-сервер с авторизацией по логину и паролю (с использованием скрипта checkpass.pl) - https://www.ylsoftware.com/news/680