Главная / Справочник ошибок / Сертификаты и TLS
Сервис .NET не доверяет сертификату
The remote certificate is invalid according to the validation procedure: RemoteCertificateNameMismatch, RemoteCertificateChainErrors
The remote certificate is invalid according to the validation procedure, RemoteCertificateChainErrors, UntrustedRoot, PartialChain в сервисах Directum RX на Linux: как добавить корневой сертификат и проверить цепочку.
Что это значит
Сервис на .NET подключился по TLS и отверг сертификат сервера. В конце сообщения названа причина.
RemoteCertificateNameMismatch: имя, по которому подключаемся, не входит в сертификат.RemoteCertificateChainErrorsсUntrustedRoot: корневой сертификат не установлен как доверенный на сервере, где работает сервис.PartialChain: сервер не отдаёт промежуточный сертификат, цепочка обрывается.
Браузер на рабочем месте при этом может открывать сайт без замечаний: у него своё хранилище, и он умеет достраивать цепочку сам.
Как проверить
С сервера, где работает сервис:
openssl s_client -connect <адрес>:443 -servername <имя> -showcerts </dev/null
openssl x509 -in cert.pem -noout -subject -issuer -ext subjectAltName -dates
В выводе первой команды смотрите Verify return code и сколько сертификатов отдал сервер. Имя должно быть в subjectAltName: поле CN современные клиенты не учитывают.
Что сделать
- Корень не доверен: на Debian, Ubuntu и Astra положить корневой сертификат в
/usr/local/share/ca-certificates/с расширением.crtи выполнитьupdate-ca-certificates. На РЕД ОС:/etc/pki/ca-trust/source/anchors/иupdate-ca-trust. Затем перезапустить сервис. - В контейнере хранилище своё: сертификат нужно добавить в образ или смонтировать, на сервере его недостаточно.
- Неполная цепочка: на сервере, который отдаёт сертификат, собрать файл из сертификата и промежуточных по порядку.
- Имя не совпало: перевыпустить сертификат с нужными именами в
subjectAltNameили подключаться по имени из сертификата.