Использование 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 сервере.

[email protected]:~# apt-get install openvpn easy-rsa



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



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

[email protected]:~# 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

[email protected]:~/ca# source vars

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



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

[email protected]:~/ca# ./clean-all



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

[email protected]:~/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

[email protected]:~/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



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

[email protected]:~/ca# ./build-dh



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



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

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




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


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

[email protected]:~/ca# ./easyrsa gen-req server vpn

[email protected]:~/ca# ./easyrsa sign-req server vpn



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




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


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

[email protected]:~/ca# ./build-key home-client



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

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

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




[email protected]:~/ca# ./easyrsa gen-req home-client

[email protected]:~/ca# ./easyrsa sign-req home-client



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




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

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