Рассмотрим использование 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 выполнена.
Читайте про то как отозвать выпущенный сертификат.