Openvpn verify error depth 0 error crl has expired cn

Ошибка VERIFY ERROR: depth=0, error=CRL has expired в логе openvpn.log на ubuntu server ? 2 варианта решения вы узнаете в этой публикации.

Столкнулся с проблемой, когда клиенты не могут подключиться к openvpn серверу, запущенному на ubuntu server, при этом на сервере в логах openvpn постоянно сыпется ошибка:
WARNING: Failed to stat CRL file, not (re)loading CRL.
VERIFY ERROR: depth=0, error=CRL has expired: CN= название_клиента
И уж раз пришлось решать проблему, то 2 варианта её решения опишу здесь.
Все действия выполнялись на ubuntu server 20.04.

Вариант решения 1:
Смотрим в консоли ubuntu server:
cd /etc/openvpn/server
sudo openssl crl -inform PEM -in crl.pem -text -noout

вижу:
Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm:
Issuer: CN = имя
Last Update: Jan 6 18:59:07 2021 GMT
Next Update: Jul 5 18:59:07 2021 GMT

Конфиг /etc/openvpn/server/server.conf службы openvpn содержит у меня строку:
crl-verify /etc/openvpn/server/crl.pem
которая как раз говорит о том, какие сертификаты отозваны. Если для вас не важно отзывать сертификаты клиентов, то в конфигурационном файле /etc/openvpn/server/server.conf закомментируйте строку выше и перезапустите службу openvpn, проблема должна устраниться. Если же важно блокировать подключение клиентам с отозванными сертификатами, то строку не комментируем а переходим к решению номер 2.

Вариант решения 2.
в /etc/easy-rsa/vars вписываем параметр:
set_var EASYRSA_CRL_DAYS 36500

Так как генерировал сертификаты я с помощью easyrsa, то сделаем сначала резервную копию файла /etc/openvpn/server/crl.pem
sudo cp /etc/openvpn/server/crl.pem /etc/openvpn/server/crl.pem-bkp
и генерируем новый /etc/openvpn/server/crl.pem
cd /etc/easy-rsa/
sudo ./easyrsa gen-crl

После генерации не забудьте переложить его из /etc/easy-rsa/pki/ в место, которое указывали в конфиге openvpn сервера /etc/openvpn/server/server.conf в строке crl-verify /etc/openvpn/server/crl.pem

После генерации, проверяем:
cd /etc/openvpn/server
sudo openssl crl -inform PEM -in crl.pem -text -noout

Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm:
Issuer: CN = имя
Last Update: Jul 7 05:50:04 2021 GMT
Next Update: Jun 13 05:50:04 2121 GMT

Видим, что сгенерировали на 100 лет вперёд, вы можете генерировать на нужный вам период. Здесь 100 лет (35500 дней) просто для примера.
Перезапускаем службу openvpn
sudo service openvpn restart
и проблемы такой больше быть не должно.

🔍 Простой поиск по базе знаний

OpenVpn logo

Достаточно часто при использовании списка отозванных сертификатов через месяц становится невозможно установить связь с сервером OpenVPN. В логах OpenVPN появляется ошибка установления соединения с сервером:

TLS: Initial packet from [AF_INET]ХХ.ХХ.ХХ.ХХ:62889, 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.pem (CRL — certificate revoke list). Проверить это можно выдав следующую команду:

$ sudo openssl crl -inform PEM -in /etc/openvpn/easy-rsa/keys/crl.pem -text -noout
[sudo] пароль для user1: 
Certificate Revocation List (CRL):
Version 1 (0x0)
Signature Algorithm: sha256WithRSAEncryption
Issuer: /C=RU/ST=RU/L=Moscow/O=ХХХХ/OU=ХХХХ/CN=ХХХХ/name=EasyRSA/emailAddress=хххх@yourmail.ru
Last Update: Sep 10 09:26:36 2020 GMT
Next Update: Sep 11 09:26:36 2021 GMT

Из вывода видно что не позднее 11 сентября необходимо перевыпустить список отозванных сертификатов. Иначе будет появляться эта ошибка.

Можно конечно перевыпустить список ещё на год, но лучше всё таки увеличить его срок жизни.

Время жизни списка отозванных сертификатов задается в файле /etc/openvpn/easy-rsa/openssl-1.0.0.cnf в следующей секции:

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crl_extensions = crl_ext

default_days = 3650 # how long to certify for
default_crl_days= 365 # how long before next CRL
default_md = sha256 # use public key default MD
preserve = no # keep passed DN ordering

default_crl_days= 365 это и есть количество дней до перевыпуска списка отозванных сертификатов или время жизни этого списка. Открываем файл конфигурации любимым редактором, например nano:

$ sudo nano  /etc/openvpn/easy-rsa/openssl-1.0.0.cnf

и изменяем default_crl_days= 365 на, например, default_crl_days= 3650. То-есть на 10 лет. Затем перевыпускаем сам список:

$ sudo su
# cd /etc/openvpn/easy-rsa
# openssl ca -gencrl -keyfile keys/ca.key -cert keys/ca.crt -out keys/crl.pem -config ./openssl-1.0.0.cnf
# exit

Проверяем:

$ sudo openssl crl -inform PEM -in /etc/openvpn/easy-rsa/keys/crl.pem -text -noout
[sudo] пароль для user1: 
Certificate Revocation List (CRL):
Version 1 (0x0)
Signature Algorithm: sha256WithRSAEncryption
Issuer: /C=RU/ST=RU/L=Moscow/O=ХХХХ/OU=ХХХХ/CN=ХХХХ/name=EasyRSA/emailAddress=хххх@yourmail.ru
Last Update: Sep 10 09:26:36 2020 GMT
Next Update: Sep 11 09:26:36 2030 GMT

Все нормально и все должно работать.

После обнов­ле­ния OpenVPN либо после пере­но­са на дру­гую ОС мож­но полу­чить ошиб­ку «OpenVPN CRL has expired». Кли­ен­ты не смо­гут под­клю­чить­ся к серверу.

На сер­ве­ре в логе будет что-то вроде:

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).

В кон­фи­ге сер­ве­ра спи­сок 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

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

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

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

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

# service openvpn restart

https://github.com/midnight47/

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Openvpn verify error certificate is not yet valid
  • Openvpn transport error network eof error
  • Openvpn tls error local remote tls keys are out of sync
  • Openvpn tls error cannot locate hmac in incoming packet from
  • Openvpn tls crypt unwrap error packet too short

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии