После обновления 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