Генерация ключей OpenVPN

1. Введение

Взаимодействие между сервером и клиентом OpenVPN осуществляется по защищенному каналу связи. Для авторизации и передачи данных используется протокол SSL. Исходя из этого необходима процедура генерации и выдачи ключей сертификатов (как клиенту, так и серверу).

Для генерации сертификатов и обслуживания ключей (сервера и клиентов) используется пакет easy-rsa.

Описание файлов (директория keys):

2. Генерация ключей сервера

Примечание: операции, описанные в данном разделе выполняются только один раз, в процессе инсталляции сервера.

Перейти в директорию easy-rsa OpenVPN сервера. Убедиться, что файлы ca.crt и ca.key присутствуют в директории сертификационного центра (СЦ) сервера.

Перейти в командную оболочку sh:

sh

Установить переменные окружения:

. vars

Создать сертификат сервера server-name:

./build-key-server server-name

Примечание: наименование сервера должно совпадать с именем хоста сервера (см. uname -a).

Создать файл параметров Диффи-Хелмана:

./build-dh

Создать TLS-ключ:

openvpn --genkey --secret ta.key

Создать файл отзыва сертификатов (CRL):

export KEY_CN=""
export KEY_OU=""
openssl ca -config openssl.cnf -gencrl -out keys/crl.pem

3. Генерация и выдача ключей клиенту

Перейти в директорию easy-rsa OpenVPN сервера. Убедиться, что файлы ca.crt и ca.key присутствуют в директории сертификационного центра (СЦ) сервера.

Перейти в командную оболочку sh:

sh

Установить переменные окружения:

. vars

Создать сертификат клиента client-name:

./build-key client-name

Создать базовый файл конфигурации клиента openvpn.conf со следующим содержанием:

client
dev tun0
proto tcp
remote SERVER_IP PORT_NUMBER
resolv-retry infinite
nobind
script-security 3 system
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/client-name.crt
key /usr/local/etc/openvpn/keys/client-name.key
tls-auth /usr/local/etc/openvpn/keys/ta.key 1
comp-lzo
verb 3

Выдать клиенту client-name следующие файлы:
ca.crt
client-name.crt
client-name.key
ta.key
openvpn.conf

4. Команды администрирования

Отозвать сертификат клиента client-name:

./revoke-full client-name

Просмотреть список отозванных сертификатов:

./list-crl

Создать запрос на получение сертификата:

./build-req cert-name

Подписать запрос на получение сертификата:

./sign-req cert-name

Удаление всех ключей с сервера:

./clean-all

ВНИМАНИЕ! Данная команда выполняется только при ликвидации сервера.

Подробнее по вопросу
Другая документация