Отзыв сертификатов пользователей в OpenVPN

  • Автор:

OpenVPN-Revoking-Certificates-000.pngСистема клиентского доступа в OpenVPN построена вокруг инфраструктуры открытых ключей (PKI) и основным средством идентификации пользователя является сертификат. Располагая действительным сертификатом клиент может подключиться к любому серверу, использующему сертификаты вашего центра сертификации (CA). Если доступ пользователя необходимо прекратить, то выданный ему сертификат следует отозвать. В данной статье мы рассмотрим процесс отзыва сертификатов для различных версий Easy-RSA на платформах Windows и Linux, а также настройку OpenVPN севера для проверки сертификатов на отзыв.

Easy-RSA 2 Linux

Вторая версия Easy-RSA наиболее часто используется совместно с OpenVPN, так как входит в состав большинства актуальных на данный момент дистритбутивов. В нашем случае будет рассматриваться Ubuntu 18.04, но серьезных отличий с иными Linux системами нет, так как Easy-RSA это просто набор скриптов, облегачающий работу с OpenSSL.

Обычно корневая директория PKI находится в каталоге настроек OpenVPN - /etc/openvpn/easy-rsa, здесь и далее примем такое расположение как умолчание. Прежде чем выполнять отзыв, Easy-RSA потребуется немного настроить, откройте файл @openssl.conf и приведите к следующему виду строку:

RANDFILE = /etc/openvpn/easy-rsa/keys/.rnd

Ниже найдите опцию, которая задает срок действия списка отозванных сертификатов, по умолчанию это 30 дней, после чего его нужно будет перевыпустить, имеет смысл установить более длительный срок:

default_crl_days= 30

Сохраните изменения, после чего создайте указанный файл:

touch /etc/openvpn/easy-rsa/keys/.rnd

Теперь можно приступать к отзыву, для этих целей используется скрипт revoke-full. Перейдем в директорию Easy-RSA:

cd /etc/openvpn/easy-rsa

Загрузим переменные:

source ./vars

И выполним отзыв, для этого нам нужно знать CN (Commom Name) сертификата, в нашем случае это ivanov:

./revoke-full ivanov

OpenVPN-Revoking-Certificates-001.pngСообщение:

error 23 at 0 depth lookup: certificate revoked

не является ошибкой! Оно сообщает о том, что проверка сертификата не увенчалась успехом по причине его отзыва.

После выполнения данной команды впервые в каталоге /etc/openvpn/easy-rsa/keys появится файл crl.pem - список отозванных сертификатов. Данный файл будет обновляться после каждого успешного отзыва.

Easy-RSA 2 Windows

В Windows никаких дополнительных настроек производить не нужно, однако также рекомендуется увеличить срок действия CRL. Каталог Easy-RSA обычно располагается внутри каталога установки OpenVPN, по умолчанию это C:\Program Files\OpenVPN\easy-rsa. Для измненения срока действия откройте файл openssl-1.0.0.cnf и измените опцию, указав нужное количество дней:

default_crl_days= 30

Затем перейдем в каталог Easy-RSA (так как он является системным, то командная строка должна быть запущена от имени Администратора):

cd "C:\Program Files\OpenVPN\easy-rsa"

Загрузим переменные:

vars

Отзовем сертификат:

revoke-full ivanov

OpenVPN-Revoking-Certificates-002.pngРезультатом выполнения команды также будет создание или обновление файла списка отозванных сертификатов - crl.pem.

Easy-RSA 3 Linux

Новая версия Easy-RSA пока не имеет широкого распространения и присутствует в ограниченном количестве новых дистрибутивов, в частности в Debian 10. Приемы работы с ней значительно отличаются от Easy-RSA 2 и мы посвящали этому отдельную статью, в которой рассматривали в том числе и отзыв сертификатов.

В Easy-RSA 3 для отзыва сертификатов и создания/обновления списка отозванных сертификатов предназначены разные команды, поэтому вы можете сформировать CRL заранее и подключить его к конфигурации OpenVPN не дожидаясь отзыва.

Будем также считать, что директория Easy-RSA расположена в /etc/openvpn/easy-rsa, сразу перейдем в нее:

cd  /etc/openvpn/easy-rsa

Откроем файл vars, найдем и раскомментируем в нем следующую опцию, которая задает срок действия CRL, по умолчанию установлено 180 дней, укажите нужное вам значение:

set_var EASYRSA_CRL_DAYS 180

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

./easyrsa gen-crl

Итогом выполнения данной команды будет появление файла crl.pem в директории pki.

Для отзыва сертификата выполните (предварительно перейдя в директорию Easy-RSA):

./easyrsa revoke ivanov

В данном случае вам потребуется явно подтвердить отзыв, введя yes на запрос утилиты.

OpenVPN-Revoking-Certificates-003.pngПосле отзыва сертификата вам потребуется обновить список CRL, для этого еще раз выполните:

./easyrsa gen-crl

Еще раз напомним, что для отзыва сертификатов мы должны указать их CN, поэтому при их создании задавайте им осмысленные имена, чтобы потом не пришлось угадывать, как называется сертификат Иванова: client123, client231 или client321. Также помните о том, что отзыв сертификата - действие необратимое, даже если вы повторно выпустите сертификат с этим же именем (CN), это будет совсем другой сертификат, который придется заново выдать пользователю.

Настройка OpenVPN для работы со списком отозванных сертификатов (CRL)

После того, как вы создали или обновили CRL (файл crl.pem) его следует скопировать в директорию с ключами OpenVPN сервера, это действие следует повторять после каждого отзыва сертификата (и обновления файла crl.pem).

Затем откроем конфигурацию сервера OpenVPN и добавим туда директиву, отвечающую за проверку отозванных сертификатов. В Linux:

crl-verify keys/crl.pem

В данном случае подразумевается, что ключи и CRL находятся в директории /etc/openvpn/keys.

В Windows:

crl-verify "C:\\Program Files\\OpenVPN\\keys\\crl.pem"  

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

При обновлении списка отозванных сертификатов достаточно просто скопировать с заменой файл crl.pem, если серверов несколько, то это нужно сделать на каждом из них.

После чего обязательно перезапустите службу OpenVPN сервера. Это нужно сделать потому, что OpenVPN перечитывает CRL один раз в час и в течении этого времени клиенты с отозванными сертификатами смогут продолжать подключаться и работать. В Linuх для этого выполните:

service openvpn restart

В Windows воспользуйтесь штатной оснасткой Службы.

Для клиента с отозванным сертификатом процесс подключения будет "зависать" на этапе согласования ключей и через 60 секунд выдавать в лог сообщение:

TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed

При этом клиент будет продолжать попытки подключения в соответствии со значениями опции keepalive. Если используется GUI, то клиент будет "вечно" висеть в желтом цвете.

OpenVPN-Revoking-Certificates-004.pngЧтобы ограничить число переподключений используйте в конфигурации клиента опцию:

connect-retry-max 25

Которая задает максимальное количество переподключений, в данном случае 25, однако вы должны указать ее заранее, передать на клиента с отозванным сертификатом вы ее не сможете. Мы рекомендуем всегда использовать эту опцию, когда вы настраиваете OpenVPN клиент на узлах, которые вы не контролируете, например, на домашних ПК или ноутбуках сотрудников.

Дополнительные материалы:


  1. Настраиваем VPN. Часть 1 - Общие вопросы
  2. Настраиваем VPN. Часть 2 - Cтруктура сети
  3. Настраиваем VPN сервер. Часть 3 - PPTP. Платформа Linux
  4. Настраиваем VPN сервер. Часть 4 - PPTP. Платформа Windows
  5. Настраиваем VPN сервер. Часть 5 - L2TP. Платформа Windows
  6. Ubuntu Server. Форвардинг PPTP средствами iptables
  7. Организация VPN каналов между офисами при помощи OpenVPN
  8. Организация каналов между офисами при помощи OpenVPN с дополнительной парольной защитой
  9. Организация VPN каналов между офисами. Маршрутизация
  10. Организация каналов между офисами при помощи OpenVPN на платформе Linux
  11. Настройка OpenVPN-сервера для доступа в интернет
  12. Настройка двух и более OpenVPN-серверов на одном сервере
  13. Почему тормозит OpenVPN? Размер буферов приема и отправки
  14. Как настроить несколько одновременных OpenVPN подключений в Windows
  15. SSH-туннели на службе системного администратора
  16. Создание ключей и сертификатов для OpenVPN при помощи Easy-RSA 3
  17. Настройка OpenVPN-сервера на роутерах Mikrotik
  18. Настройка VPN-подключения в роутерах Mikrotik
  19. OpenVPN объединяем ключи и конфигурацию клиента в один файл
  20. OpenVPN и инфраструктура открытых ключей (PKI)
  21. Настройка OpenVPN-сервера на роутерах Mikrotik
  22. Настраиваем IKEv2 VPN-сервер на роутерах Mikrotik с аутентификацией по сертификатам