#Что происходит и когда применима инструкция
Сайт отправляет конечный сертификат, но не все необходимые промежуточные сертификаты. Некоторые современные браузеры строят цепочку самостоятельно, тогда как другие клиенты получают ошибку доверия. Здесь требуется исправить цепочку на точке завершения TLS, а не добавлять корневой сертификат в доверенные всем клиентам.
#Основные причины и их признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Использован только cert.pemВместо файла цепочки сервер отправляет только сертификат узла. | В настройке TLS указан одиночный сертификат сайта | Укажите предусмотренный файлом fullchain.pem полный набор. |
| Неправильный порядок PEMВ начале обычно должен идти сертификат сайта, далее нужные промежуточные звенья. | Сервер сообщает ошибку или отдаёт несовместимую цепочку | Сверьте Issuer/Subject и документацию УЦ. |
| TLS завершает другое устройствоCDN, балансировщик или хостинг может использовать независимый комплект. | На сервере файлы верны, а снаружи цепочка иная | Проверьте цепочку на каждом внешнем узле. |
#Пошаговая диагностика и устранение
- Снимите точную ошибку клиентаПопросите пользователя сохранить название приложения, систему, время и код ошибки, например unable to get local issuer certificate. Откройте сайт из другой сети. Различайте неполную цепочку и ошибку имени домена: это разные проверки.
- Посмотрите сертификаты, отдаваемые снаружиНа Linux/macOS с OpenSSL выполните диагностическое подключение, передавая имя SNI. Замените пример своим доменом, проверьте
Certificate chain, субъекты и проверку пути. Сам факт подключения s_client ещё не подтверждает доверие.Linux · Терминал (Bash)КомандаТерминал Linux/macOS; без администратора.example.comзаменить; вывод содержит публичные сертификаты и результат проверки, ошибок быть не должно.openssl s_client -connect example.com:443 -servername example.com -showcerts -verify_return_error </dev/null
- Определите конечную точку TLSЧерез DNS и настройки CDN установите, какой сервер отвечает посетителю. Если снаружи CDN, проверяйте сертификат внешнего узла в панели CDN отдельно от Origin. Не меняйте сертификат на VPS, если клиент получает его от другой системы.
- Сравните выдачу и локальные файлыНа Nginx откройте нужный блок
serverи строкуssl_certificate, на Apache — настройки SSLCertificateFile соответствующего виртуального узла. Проверьте путь, разрешения на чтение и дату файла без передачи закрытого ключа куда-либо. В Nginx для Certbot обычно используетсяfullchain.pem, а не одинcert.pem.
- Подготовьте корректную цепочкуСкачайте промежуточный сертификат только из доверенного источника удостоверяющего центра либо используйте штатный fullchain.pem, созданный клиентом ACME. Не скачивайте закрытые ключи из интернета и не приклеивайте произвольные корневые сертификаты. Сохраните копию конфигурации.
- Проверьте настройки до примененияНа Linux с Nginx выполните тест синтаксиса, он не перезапускает сервер. Если используете Apache, примените
apachectl configtestсоответствующей установки. При ошибке верните старую конфигурацию и не выполняйте перезапуск.Linux · Терминал (Bash)КомандаНужен sudoLinux, Nginx;sudoтребует прав администратора. Ожидаются syntax is ok и test is successful.sudo nginx -t
- Аккуратно примените изменениеТолько после успешной проверки и в согласованное окно дайте серверу перечитать конфигурацию через панель хостинга либо штатный reload. Если сертификат управляется CDN, применяйте исправление в его кабинете. Не меняйте системное хранилище доверенных корней ради обхода проблемы.
- Повторите внешнюю проверкуВыполните ту же команду с внешнего устройства и на проблемном клиенте. Убедитесь, что полная цепочка доступна, имя соответствует домену и ошибка доверия исчезла. Если прежняя цепочка остаётся только на части адресов, проверьте все IPv4/IPv6 и узлы CDN.
#Проверка результата
Внешняя TLS-проверка сообщает доверенную цепочку и правильное имя; клиенты без заранее закешированных промежуточных сертификатов открывают сайт без предупреждения, HTTPS и прежние приложения продолжают работать.
#Если решить проблему не удалось
Если цепочка верная, но клиент всё ещё отвергает сайт, проверьте системное время, доверенный корень и ограничения TLS старого клиента. Не предлагайте посетителям устанавливать сомнительные корневые сертификаты; направьте к администратору устройства.