Ошибка OpenVPN: VERIFY_ERROR: depth=0, error=self signed certificate in cert chain
- Клиент или сервер прерывает TLS-рукопожатие с фатальной ошибкой:
TLS_ERROR: BIO read tls_read_plain_content: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed. - В журнале OpenVPN регистрируется запись
VERIFY ERROR: depth=0, error=self signed certificate in certificate chain: /CN=server. - Соединение сбрасывается сразу после отправки
Control Channel: Initialized TLS v1.3. - Клиентские устройства не могут завершить авторизацию и уходят в бесконечный цикл реконнекта.
1. Проверка цепочки доверия и файла CA
Ошибка возникает, когда представленный сертификат подписан сам собой или не доверен корневым CA, указанным в директиве ca.
# Проверка соответствия клиентского сертификата корневому CA
openssl verify -CAfile /etc/openvpn/ca.crt /etc/openvpn/client.crt
# Проверка соответствия открытого ключа сертификата и приватного ключа
openssl x509 -noout -modulus -in /etc/openvpn/client.crt | openssl md5
openssl rsa -noout -modulus -in /etc/openvpn/client.key | openssl md5Хэши MD5 должны быть строго идентичны.
2. Проверка и исправление параметров в конфиге клиента (.ovpn)
Убедитесь, что в конфигурационном файле клиента указан корректный корневой сертификат Удостоверяющего Центра (CA), а не сам сертификат сервера:
client
dev tun
proto udp
remote vpn.company.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
# Проверьте правильность секций
<ca>
-----BEGIN CERTIFICATE-----
# Вставьте содержимое ca.crt (Root CA), выпустившего server.crt
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
# Сертификат конкретного клиента
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
# Приватный ключ клиента
-----END PRIVATE KEY-----
</key>3. Настройка валидации имени сервера
Если сертификат выпущен корректно, добавьте явную валидацию Common Name:
remote-cert-tls server
verify-x509-name 'server_common_name' name Частые вопросы (FAQ)
Что означает depth=0 в тексте ошибки?
Depth=0 указывает, что ошибка валидации произошла на уровне самого конечного сертификата (сервера или клиента), а не вышестоящего промежуточного или корневого CA (depth=1, 2).
Можно ли временно отключить проверку сертификата для тестов?
В OpenVPN нет безопасного способа отключить валидацию сертификата CA в боевом режиме TLS, однако директива tls-cert-profile insecure может разрешить устаревшие алгоритмы хеширования.
Почему ошибка появляется после перевыпуска сертификата сервера?
Если новый серверный сертификат был перевыпущен с новым Root CA, старые клиенты с прежним блоком <ca> не смогут его верифицировать до обновления конфигурационного файла.
Как проверить дату истечения срока действия сертификата через CLI?
Выполните команду: openssl x509 -enddate -noout -in /etc/openvpn/server.crt.