Сервер в кармане, или просто о сложном!

главная - Статьи - Удаленный доступ (VPN)

Ошибка OpenVPN CRL has expired (просрочен список CRL)

Теги: Linux OpenVPN VPN VPN сервер

Сразу после обновления OpenVPN до версии 2.4.1(и, соответственно, после рестарта службы), клиенты не смогли подключиться к серверу, а на сервере в логе было что-то вроде:

TLS: Initial packet from [AF_INET]19.10.5.11:51849, sid=ba13f8a4 4c4aec28
VERIFY ERROR: depth=0, error=CRL has expired: CN=client1
OpenSSL: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned
TLS_ERROR: BIO read tls_read_plaintext error
TLS Error: TLS object -> incoming plaintext read error
TLS Error: TLS handshake failed
SIGUSR1[soft,tls-error] received, client-instance restarting

Это ошибка проверки списка отзывов сертификатов (CRL - certificate revoke list).

Возможно, это и не связано с версией 2.4, просто очень долго не нужно было перезапускать сервис OpenVPN, а тут при обновлении пришлось.

В конфиге сервера список CRL указан директивой:

crl-verify crl.pem

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

Для решения проблемы со списком CRL надо этот список обновить. В зависимости от того, каким образом вы управляете ключами OpenVN, это может быть по-разному.

Перед любыми действиями с CA рекомендую сделать архив:

# tar -cvzf /backup/openvpn.tar.gz /etc/openvpn

1) OpenSSL (общий случай):

# openssl ca  -gencrl -keyfile ca.key -cert ca.crt  -out crl.pem -config openssl.cnf

далее файл crl.pem скопировать в рабочее расположение OpenVPN и рестарт OpenVPN-сервера.

2) EasyRSA (версия 3):

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

далее файл crl.pem скопировать в рабочее расположение OpenVPN:

# mv pki/crl.pem /etc/openvpn/

Рестарт сервера OpenVPN:

# systemctl restart openvpn@server

3) EasyRSA (версия 2) + OpenSSL

Не нашел специальной команды на обновление CRL с помощью EasyRSA 2, пришлось использовать openssl.

# cd /etc/openvpn/easy-rsa/2.0/
# . /etc/openvpn/easy-rsa/2.0/vars
# echo $KEY_CONFIG
/etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf

По-умолчанию, обновление списка отозванных сертификатов производится раз в 30 дней. Это указано в конфиге в секции [ CA_default ]:

default_crl_days= 30

Можно увеличить этот интервал, например:

default_crl_days= 365

# openssl ca -gencrl -keyfile keys/ca.key -cert keys/ca.crt -out keys/crl.pem -config openssl-1.0.0.cnf

[ спойлер ] На этом этапе может возникнуть ошибка вроде configuration file routines:STR_COPY:variable has no value:conf_def.c

error on line 145 of /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
4352345234545:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:618:line 145

Это из-за того, что скрипт vars не экспортировал переменную, которую использует конфиг openssl-1.0.0.cnf. В скрипте vars раскомментировал директиву export KEY_CN="CommonName" (была в самом конце файла). Еще раз выполнил экспорт:

# . /etc/openvpn/easy-rsa/2.0/vars

Теперь команда:

# openssl ca -gencrl -keyfile keys/ca.key -cert keys/ca.crt -out keys/crl.pem -config openssl-1.0.0.cnf

выполнилась успешно.

Можно просмотреть выпущенный сертификат CRL:

# openssl crl -inform PEM -in keys/crl.pem -text -noout

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

Далее файл crl.pem скопируем в рабочее расположение OpenVPN и рестартуем OpenVPN-сервер:

# service openvpn restart

Дополнительно

Открытым остался вопрос: все дело в просроченном сроке обновления сертификата CRL (default_crl_days) или только из-за обновления OpenVPN, не знаю. Проблема решена, дальше будет видно.

Все вышеописанное говорит о том, что в основе всех "easyrsa" скриптов лежит обычный openssl, поэтому 1) при возможности тренируйтесь в понимании "чистого" openssl, 2) имейте ввиду, что сертификаты openvpn могут быть частью общей инфраструктуры (например, у вас может быть свой корпоративный CA, чей сертификат установлен как корневой доверенный везде, а подписанные им сертификаты используются и в OpenVPN, и в веб-интерфейсах оргтехники, и в контроле доступа к локальноум веб-сайту и при шифровании или подписи почты и в других областях. 

Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?