Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

SEC-X509-CHAIN-018 Сетевое оборудование и VPN

Траблшутинг ошибок проверки цепочки сертификатов X.509 в IKEv2 и OpenVPN

Обновлено: 25.08.2026 · Официальная документация ↗

При согласовании TLS/IKEv2 соединений на базе сертификатов X.509 возникают критические сбои:

  • Ошибка TLS error: Unsupported certificate purpose или Certificate verify failed.
  • Ошибка unable to get local issuer certificate (Error 20) при наличии валидного корневого CA.
  • Отказ подключения IKEv2 с формулировкой NO_PROPOSAL_CHOSEN / AUTHENTICATION_FAILED из-за несовпадения поля SAN (Subject Alternative Name).
  • Блокировка всех клиентов из-за истечения срока действия списка отзыва сертификатов (CRL Expired).

1. Проверка и сборка полной цепочки сертификатов (Full Chain)

Сервер должен отдавать клиенту не только свой конечный сертификат, но и все промежуточные сертификаты (Intermediate CA) в строго правильном порядке:

# Правильный порядок сборки Full Chain:
cat server.crt intermediate_ca.crt > fullchain.pem

# Проверка валидности всей цепочки через OpenSSL:
openssl verify -CAfile root_ca.crt -untrusted intermediate_ca.crt server.crt

2. Проверка назначения сертификата (Extended Key Usage - EKU)

Сертификат сервера должен содержать расширение TLS Web Server Authentication (1.3.6.1.5.5.7.3.1), а клиентский — TLS Web Client Authentication (1.3.6.1.5.5.7.3.2):

openssl x509 -in server.crt -text -noout | grep -A 2 "Extended Key Usage"

3. Проверка Subject Alternative Name (SAN) для IKEv2 / StrongSwan / Windows

Нативные клиенты Windows IKEv2 требуют обязательного наличия DNS-имени или IP-адреса сервера в поле SAN (CN игнорируется):

openssl x509 -in server.crt -text -noout | grep -A 1 "Subject Alternative Name"
# Должно быть: DNS:vpn.company.com или IP Address:198.51.100.1

4. Траблшутинг просроченного CRL (Certificate Revocation List)

# Проверка срока годности списка отзыва:
openssl crl -in /etc/openvpn/crl.pem -text -noout | grep "Next Update"

# Принудительное обновление CRL через Easy-RSA:
cd /etc/openvpn/easy-rsa
./easyrsa gen-crl
cp pki/crl.pem /etc/openvpn/crl.pem
chmod 644 /etc/openvpn/crl.pem
💡 Практика специалистов: При генерации CRL через Easy-RSA или OpenSSL настраивайте параметр default_crl_days как минимум на 365-730 дней либо создавайте systemd-таймер автоматического перевыпуска CRL каждые 30 дней, чтобы избежать внезапного ночного отказа всех VPN-шлюзов.

Частые вопросы (FAQ)

Почему при наличии Root CA возникает ошибка 'unable to get local issuer certificate'?

Клиент не знает промежуточный центр сертификации (Intermediate CA). Сервер обязан передавать всю цепочку промежуточных сертификатов (Full Chain) во время TLS Handshake.

Почему Windows Native IKEv2 клиент выдает 'Error 13801'?

Ошибка 13801 указывает на то, что сертификат сервера не прошел проверку: на сервере отсутствует EKU 'Server Authentication', имя хоста не совпадает с полем SAN, либо Root CA не установлен в хранилище 'Доверенные корневые центры' локального компьютера.

Что произойдет, если файл crl.pem станет недействительным по времени (Next Update в прошлом)?

Демон OpenVPN/StrongSwan заблокирует абсолютно все входящие подключения (даже с валидными сертификатами), считая систему проверки отозванных ключей скомпрометированной.

Как проверить соответствие приватного ключа и сертификата?

Сравните их md5-хэши модулей: openssl x509 -noout -modulus -in cert.crt | openssl md5 и openssl rsa -noout -modulus -in key.key | openssl md5. Хэши должны быть идентичными.

Полезные материалы
Рекомендуем