Генерирование сертификатов для OpenVPN с помощью Easy-RSA 3
Тематические термины: OpenVPN, Linux.
Процедура немного отличается от Easy-RSA 2 по синтаксису, но не по смыслу. В данной статье все команды выполняются на примере операционной системы Linux.
Подготовка сервера
Сертификаты для сервера
Сертификаты для клиента
Отзыв сертификата
Продление сертификата
Готовимся
Заходим в каталог с Easy-RSA 3:
cd /usr/share/easy-rsa/3.0
Создаем файл с настройками:
vi vars
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Sankt-Petersburg"
export KEY_CITY="Sankt-Petersburg"
export KEY_ORG="DMOSK COMPANY"
export KEY_EMAIL="master@dmosk.ru"
export KEY_CN="DMOSK"
export KEY_OU="DMOSK"
export KEY_NAME="name-openvpn-server.dmosk.ru"
export KEY_ALTNAMES="name-openvpn-server"
* где KEY_CN и KEY_OU: рабочие подразделения (например, можно указать название отдела); KEY_NAME: адрес, по которому будет выполняться подключение (можно указать полное наименование сервера); KEY_ALTNAMES — альтернативный адрес.
Запускаем скрипт:
. ./vars
Сертификаты сервера
Инициализируем PKI:
./easyrsa init-pki
Создаем корневой сертификат:
./easyrsa build-ca
* после вводим дважды пароль и имя сервера.
Формируем ключ Диффи-Хеллмана:
./easyrsa gen-dh
Создаем запрос на сертификат для сервера и после генерируем сам сертификат:
./easyrsa gen-req vpn-server nopass
./easyrsa sign-req server vpn-server
* после ввода команды подтверждаем правильность данных, введя yes и вводим пароль, который указывали при создании корневого сертификата.
* nopass можно упустить, если хотим повысить безопасность с помощью пароля на сертификат.
Для создания ta ключа используем команду:
openvpn --genkey --secret pki/ta.key
Сертификаты сервера готовы, остается создать рабочую папку openvpn:
mkdir -p /etc/openvpn/keys
И скопировать в нее ключи:
cp -r pki/* /etc/openvpn/keys/
Пример конфигурационного файла сервера:
vi /etc/openvpn/server.conf
local 192.168.0.15
port 443
proto udp
dev tun
ca keys/ca.crt
cert keys/issued/vpn-server.crt
key keys/private/vpn-server.key
dh keys/dh.pem
tls-auth keys/ta.key 0
server 172.16.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
max-clients 32
client-to-client
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 4
mute 20
daemon
mode server
tls-server
comp-lzo
Сертификаты клиента
Создаем запрос на сертификат и сам сертификат:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
* подтверждаем правильность данных и вводим пароль корневого сертификата.
Или выполняем одной командой без необходимости подтверждения (все данные для сертификата берутся из vars):
./easyrsa build-client-full client1 nopass
Из каталога pki на компьютер клиента копируем файлы:
- ca.crt
- issued/client1.crt
- private/client1.key
- dh.pem
- При использовании tls, также копируем ta.key.
Например:
cp pki/issued/client1.crt pki/private/client1.key pki/dh.pem pki/ca.crt pki/ta.key /tmp
Пример конфигурационного файла клиента:
client
resolv-retry infinite
nobind
remote 192.168.0.15 443
proto udp
dev tun
comp-lzo
ca ca.crt
cert client1.crt
key client1.key
dh dh.pem
tls-client
tls-auth ta.key 1
float
keepalive 10 120
persist-key
persist-tun
verb 0
Отзыв сертификата
В случае, когда необходимо прекратить действие определенного сертификата, вводим:
./easyrsa revoke client1
* здесь мы отзываем сертификат для клиента client1.
Продление сертификата
Посмотреть список ранее выданных сертификатов можно в файле index.txt:
cat pki/index.txt
Предположим, что у нас закончился сертификат client1. Для его продления мы можем ввести команду:
./easyrsa renew client1 nopass
* если нужен закрытый ключ с паролем, убираем nopass.
Новые сертификаты мы найдем в каталогах pki/issued и pki/private.
Посмотреть сведения можно командой:
openssl x509 -text -in pki/issued/client1.crt