Невозможно проверить цепочку сертификатов mTLS без корневого CA — отсутствует точка доверия для верификации подписи вышестоящего центра сертификации.
Причины
- Корневой сертификат отсутствует в доверенном хранилище (файл/каталог не передан или недоступен).
- Без него криптографическая проверка подписей промежуточных и клиентского сертификатов не завершается (OpenSSL возвращает `unable to get local issuer certificate`).
- Стандартная процедура TLS требует полной цепочки до самоподписанного корневого сертификата.
Решение
1. Проверка по отпечатку (fingerprint)
Если заранее известен SHA256 отпечаток доверенного клиентского сертификата, сравнивайте его с отпечатком полученного сертификата.
bash
# Извлечь отпечаток из присланного сертификата
openssl x509 -in client.crt -noout -fingerprint -sha256
# Сравнить с эталонным (на стороне сервера)Ограничение: не защищает от подмены сертификата, если злоумышленник знает отпечаток (например, скомпрометировал хранилище).
2. Проверка через доверенный промежуточный CA
Если доступен промежуточный сертификат (Intermediatе CA), подписавший клиентский сертификат, используйте его как точку доверия, игнорируя корневой.
bash
# Проверить цепочку от client.crt до intermediate.crt (без корневого)
openssl verify -CAfile intermediate.crt -untrusted intermediate.crt client.crtНастройка в nginx:
nginx
ssl_client_certificate /path/to/intermediate.crt; # только промежуточный CA
ssl_verify_client on;Ограничение: если промежуточный CA скомпрометирован или отозван, а корневой CA недоступен для CRL/OCSP, аутентификация ненадёжна.
3. OCSP-проверка с предварительно известным OCSP-респондером
Получите OCSP-ответ от клиента (stapling) или запросите его по URL из сертификата. Для верификации ответа нужен сертификат подписавшего его CA (обычно тот же промежуточный CA).
bash
openssl ocsp -issuer intermediate.crt -cert client.crt -url -textОграничение: без корневого CA нельзя проверить подпись OCSP-респондера, если он сертифицирован корневым CA.
Вывод
Без корневого CA аутентификация mTLS возможна только через статическую привязку (fingerprint) или доверие к промежуточному CA. Для полноценной криптографической гарантии необходим корневой сертификат.