certchain.ru

Отсутствующее звено

Ошибка «unable to get local issuer certificate» почти всегда про одно: сервер не отдал промежуточный сертификат, и клиенту нечем проверить подпись.

Почему браузеры молчат

Браузер умеет достроить цепочку сам. Он кэширует промежуточные сертификаты и может скачать недостающий по ссылке AIA прямо из листового. Строгие клиенты так не делают и хотят получить цепочку целиком от сервера.

Отсюда знакомая картина: у вас в браузере всё зелёное, а бот, платёжный шлюз или мобильное приложение отказываются работать.

Как убедиться

openssl s_client -connect example.com:443 -servername example.com -showcerts

# строгая проверка
openssl s_client -connect example.com:443 -servername example.com -verify_return_error

Один сертификат в выводе означает, что промежуточного нет. Если их два и больше, но ошибка осталась, смотрим порядок и сроки: возможно, отдано не то звено или цепочка обрывается раньше корня.

Что делать

Отдавать полный файл. В nginx это ssl_certificate с fullchain.pem. Если настроен стейплинг OCSP, промежуточные нужны ещё раз, в ssl_trusted_certificate. Это другой файл, и подменять его листовым сертификатом нельзя.

Проверять лучше снаружи. Изнутри машины видно локальные файлы, а не то, что реально получает клиент.