Использование easy-rsa при настройке openvpn в Ubuntu


Рассмотрим использование easy-rsa при настройке openvpn в Ubuntu. easy-rsa понадобится для создания серверных и клиентских сертификатов и работы с ними.

Создадим CA и выпустим сертификаты. CA и сервер OpenVPN будут размещаться на одной машине, клиент на другой.



Генерация сертификатов с помощью easy-rsa


easy-rsa позволяет создать на сервере CA (certificate authority). CA потребуется для того, чтобы выпускать сертификаты сервера, а также подписывать и отзывать клиентские сертификаты. За счет сертификатов трафик будет передаваться по защищенной сети только между доверенными узлами.



Нужно это для любой распределенной частной сети или при использовании VPN.


После установки easy rsa и генерации сертификатов будет разобрана настройка работы OPENVPN на Ubuntu сервере.

root@vpn:~# apt-get install openvpn easy-rsa



Создание Ceratificate Authority с помощью easy-rsa



Сначала копируем шаблонные файлы утилиты easy-rsa

root@vpn:~# make-cadir ~/ca && cd ~/ca/

Здесь потребуется отредактировать файл vars, переменные в нем указывают с какими параметрами будут генерироваться сертификаты



Открыв файл в редакторе нужно перейти в конец, где можно увидеть такие директивы

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyOrganizationalUnit"


Их значения нужно поменять на свои

Также меняется KEY_NAME.

# X509 Subject Field
export KEY_NAME="vpn"


Инициализируем vars

root@vpn:~/ca# source vars

NOTE: If you run ./clean-all, I will be doing a rm -rf on /root/ca/keys



Удаляем все существовавшие ключи, если они были

root@vpn:~/ca# ./clean-all



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

root@vpn:~/ca# ./build-ca

Country Name (2 letter code) [RU]:  Enter
State or Province Name (full name) [Sverdlovsk oblast]: Enter
Locality Name (eg, city) [Yekaterinburg]: Enter
Organization Name (eg, company) [mycompany]: Enter
Organizational Unit Name (eg, section) [IT]: Enter
Common Name (eg, your name or your server's hostname) [mycompany CA]: Enter
Name [vpn]: Enter
Email Address [[email protected]]: Enter



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


В качестве аргумента передаем имя, которое ранее было задано в vars

root@vpn:~/ca# ./build-key-server vpn

Country Name (2 letter code) [RU]: Enter
State or Province Name (full name) [Sverdlovsk oblast]: Enter
Locality Name (eg, city) [Yekaterinburg]: Enter
Organization Name (eg, company) [mycompany]: Enter
Organizational Unit Name (eg, section) [IT]: Enter
Common Name (eg, your name or your server's hostname) [vpn]: Enter
Name [vpn]: Enter
Email Address [[email protected]]: Enter

A challenge password []: Enter
An optional company name []: Enter

Certificate is to be certified until Jul 30 06:16:40 2028 GMT (3650 days)
Sign the certificate? [y/n]:y

Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated



Далее ключ по алгоритму Диффи-Хельмана

root@vpn:~/ca# ./build-dh



Он применительно к VPN ключ даст невозможность расшифровки информации при украденных ключах доступа.



Дополнительно HMAC подпись

openvpn --genkey --secret keys/ta.key




Команды из блока выделенного горизонтальными линиями (здесь и ниже) требуются только если не редактировался файл var


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

root@vpn:~/ca# ./easyrsa gen-req server vpn

root@vpn:~/ca# ./easyrsa sign-req server vpn



Если CA и vpn являются разными машинами, как и должно быть при наличии повышенных требований к безопасности — запрос генерируется на vpn, затем на съемном носителе переносится на CA, подписывается и загружается обратно.




Клиентские сертификат и ключ


Автоматически подключаться без запроса пароля в дальнейшем позволит использование для генерации ./build-key. В качестве аргумента передается имя клиента

root@vpn:~/ca# ./build-key home-client



Если использовать ./build-key-pass каждый раз будет запрашиваться пароль

На все вопросы в диалоге нужно отвечать таким же образом, как в случае с сервером.

За счет этого автоматически будет сформирован запрос и сертификат с подстановкой переменных.




root@vpn:~/ca# ./easyrsa gen-req home-client

root@vpn:~/ca# ./easyrsa sign-req home-client



На клиентской машине тоже можно сгенерировать ключ (gen req client), затем подписать его приватным ключом сервера играющего роль сертификационного центра.




На этом генерация сертификатов и ключей с easy-rsa выполнена.

Читайте про то как отозвать выпущенный сертификат.

Сказать спасибо