OpenVPN TLS Error: Certificate verify failed (certificate has expired) — решение
Клиент не может подключиться к OpenVPN серверу, в логах появляется ошибка:
- Сообщение:
TLS Error: TLS signature verification failedилиVERIFY ERROR: depth=0, error=certificate has expired. - Клиенты отключаются после планового наступления даты окончания сертификата CA или Server/Client cert.
- Ошибка возникает внезапно на всех клиентах одновременно или только на конкретном пользователе.
1. Архитектура PKI (Public Key Infrastructure) в OpenVPN
OpenVPN проверяет цепочку доверия X.509: Сертификат удостоверяющего центра (CA) -> Сертификат сервера / Сертификат клиента. Если текущее системное время на шлюзе или клиенте выходит за рамки интервала Not Before — Not After любого из сертификатов цепочки, OpenSSL немедленно прерывает рукопожатие со статусом certificate has expired.
2. Проверка срока действия сертификатов утилитой OpenSSL
# Проверка даты окончания клиентского сертификата
openssl x509 -in client.crt -noout -dates
# Проверка сертификата сервера
openssl x509 -in server.crt -noout -dates
# Проверка корневого сертификата CA
openssl x509 -in ca.crt -noout -datesПример вывода:
notBefore=May 1 10:00:00 2023 GMT
notAfter=May 1 10:00:00 2024 GMT3. Проверка системного времени и NTP
Часто сертификат валиден, но на сервере или клиенте сбились системные часы:
# Проверка времени и синхронизации NTP
timedatectl status
# Принудительная синхронизация
chronyc makestep || ntpdate pool.ntp.org4. Перевыпуск клиентского сертификата через Easy-RSA
# Переход в директорию Easy-RSA на сервере управления PKI
cd /etc/openvpn/easy-rsa
# Выпуск нового сертификата взамен истекшего
./easyrsa build-client-full client_username nopass
# Экспорт нового сертификата и приватного ключа клиенту5. Продление сертификата Certificate Authority (CA)
Если истек корневой CA, все выданные сертификаты становятся недействительными:
# Перевыпуск CA в Easy-RSA с увеличенным сроком действия
./easyrsa build-ca
# Обновление ca.crt на сервере и у ВСЕХ клиентов Частые вопросы (FAQ)
Почему при валидном сертификате в логе все равно пишется 'certificate has expired'?
Проверьте всю цепочку сертификатов. Ошибка возникает, если истек не сам клиентский сертификат, а промежуточный или корневой сертификат ca.crt.
Можно ли продлить сертификат без смены приватного ключа?
Да, с помощью команды openssl x509 можно подписать старый CSR-запрос тем же ключом CA, сохранив приватный ключ клиента неизменным.
Как настроить предупреждение об истечении сертификатов заранее?
Используйте скрипты мониторинга Prometheus (node_exporter + x509-certificate-exporter) или Zabbix, отслеживающие метрику дней до истечения сертификата.
Как влияет список отзыва сертификатов (CRL) на проверку?
Если в конфигурации включена директива 'crl-verify crl.pem', то при истечении срока действия самого файла crl.pem OpenVPN также заблокирует все подключения с ошибкой валидации.