OpenVPN CRL has expired (просрочен список CRL)

Thank you for reading this post, don't forget to subscribe!

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

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

Это ошиб­ка про­вер­ки спис­ка отзы­вов сер­ти­фи­ка­тов (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