Что это значит

Сервис на .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 современные клиенты не учитывают.

Что сделать

  1. Корень не доверен: на Debian, Ubuntu и Astra положить корневой сертификат в /usr/local/share/ca-certificates/ с расширением .crt и выполнить update-ca-certificates. На РЕД ОС: /etc/pki/ca-trust/source/anchors/ и update-ca-trust. Затем перезапустить сервис.
  2. В контейнере хранилище своё: сертификат нужно добавить в образ или смонтировать, на сервере его недостаточно.
  3. Неполная цепочка: на сервере, который отдаёт сертификат, собрать файл из сертификата и промежуточных по порядку.
  4. Имя не совпало: перевыпустить сертификат с нужными именами в subjectAltName или подключаться по имени из сертификата.