Ошибка OpenVPN CRL — OpenSSL: error:14089086:SSL routines:

Ошибка OpenVPN CRL — OpenSSL: error:14089086:SSL routines:

OpenSSL: error:14089086:SSL routines: ssl3_get_client_certificate:certificate verify failed
TLS_ERROR: BIO read tls_read_plaintext error
TLS Error: TLS object -> incoming plaintext read error
TLS Error: TLS handshake failed
TLS: Initial packet from [AF_INET]XXX.XXX.XXX.XXX:60382, sid=c9c9a1f3 02ce9312 VERIFY ERROR: depth=0, error=CRL hasexpired: CN=client_name
SIGUSR1[soft,tls-error] received, client-instance restarting

Сегодня речь пойдет об одном нюансе, связанном со списком отозванных сертификатов (Сertificate Revocation List, CRL) в OpenVPN. Данный механизм применяется, когда требуется блокировать доступ отдельных узлов к сети (в случае увольнения сотрудника или подозрения что выданный сертификат скомпрометирован).

 

В какой-то момент времени, может возникнуть ошибка OpenVPN CRL has expired (просрочен список CRL) и клиенты перестают подключаться. Убедиться, что проблема именно в этом довольно просто, достаточно закомментировать в конфиге сервера строку проверки отозванных сертификатов и перезапустить сервер.

crl-verify crl.pem

После чего клиенты спокойно начнут подключаться.

Обновление списка отозванных сертификатов OpenVPN

Для решения проблемы со списком CRL надо этот список обновить. Делается это элементарно, о чём я уже рассказывал в статье про отзыв пользовательских сертификатов OpenVPN на FreeBSD 10/11:

# cd /usr/local/etc/openvpn/easy-rsa
# ./easyrsa.real gen-crl

Почему возникла данная проблема? Дело в том, что периодичность обновление списка отозванных сертификатов задаётся в переменной default_crl_days в конфиге /usr/local/openvpn/easy-rsa/openssl-1.0.cnf:

default_crl_days= $ENV::EASYRSA_CRL_DAYS        # how long before next CRL

Сами значения переменных задаются в файле /usr/local/openvpn/easy-rsa/vars. По умолчанию обновление списка CRL происходит каждые 180 дней (можно задать своё значение, например 365 дней) :

#set_var EASYRSA_CRL_DAYS       180