Инфраструктура публичных ключей PKI
- Создаем директория для ключей:
- Качаем и устанавливаем утилиту "easy-rsa"
- По желанию, правим содержимое файла vars (длину ключей, дефолтные сроки валидности ключей и др.), например:
- Создаем инфраструктуру публичных ключей (PKI, Public Key Infrastructure):
При этом будет создан каталог /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 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, иначе придется вводить пароль с консоли при каждом запуске сервера:
Создание ключа и сертификата для клиента
Точно также начнем с формирования запроса на сертификат:
где user_name - имя клиента, а nopass предписывает создать закрытый ключ без пароля.
На основании запроса выпустим сертификат:
В данном случае используется опция client для указания формирования клиентского сертификата, также потребуется явно подтвердить действие и указать пароль от закрытого ключа CA.
Для передачи на клиент необходимо скопировать в доступную пользователю директорию закрытый ключ, сертификат клиента и сертификат CA.
Закрытый ключ пользователя также является секретным и следует исключить его передачу по открытым каналам.
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
- Создаем директория для ключей:
Код: Выделить всё
# 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