Главная / База знаний / Безопасность сайта

Ошибка SSL-сертификата на сервере: диагностика цепочки и настройка nginx

7 мин чтения обновлено 14 августа 2026 Безопасность сайта

Коротко. Ошибка SSL-сертификата на сервере почти всегда сводится к одной из четырёх причин: истёк срок, домен не совпадает с именами в сертификате, отдаётся неполная цепочка или nginx подставляет чужой сертификат из другого блока. Диагностика занимает пять минут: код ошибки в браузере называет класс проблемы, а команда openssl s_client показывает, что сервер реально отдаёт. Ключевая ловушка — неполная цепочка: сайт открывается в десктопном Chrome и падает на Android, в curl и у платёжных шлюзов. Лечится подстановкой fullchain вместо cert в конфиг и перезагрузкой nginx.

Шаг первый: прочитать код ошибки

Браузер почти всегда называет причину — нужно только развернуть подробности и посмотреть на код. Не пытайтесь чинить сертификат, пока не знаете, какая именно проверка не прошла.

Код Что означает Куда смотреть
NET::ERR_CERT_DATE_INVALID Срок действия истёк или ещё не начался Даты сертификата на сервере; часы на устройстве посетителя
NET::ERR_CERT_COMMON_NAME_INVALID Запрошенного имени нет в сертификате Список SAN: забыли www, поддомен или второй домен
NET::ERR_CERT_AUTHORITY_INVALID Издатель неизвестен клиенту Неполная цепочка, самоподписанный сертификат, национальный УЦ
ERR_SSL_PROTOCOL_ERROR Соединение не поднялось на уровне TLS Отключённые протоколы, сервис не на том порту, конфликт конфигов
NET::ERR_CERT_REVOKED Сертификат отозван центром сертификации Перевыпуск, скомпрометированный ключ, отказ поставщика
ERR_TOO_MANY_REDIRECTS Петля переадресаций, часто на фоне TLS Cloudflare в режиме Flexible плюс редирект на https в .htaccess

Отдельный маркер: ошибка видна только у одного пользователя, а у остальных сайт работает. Это почти наверняка не сервер — сбитое время на устройстве, антивирус с перехватом трафика или корпоративный прокси, подменяющий сертификаты.

Шаг второй: посмотреть, что сервер реально отдаёт

Панель хостинга и внешние чекеры показывают отфильтрованную картину. Правду говорит только прямое обращение к порту 443:

Параметр -servername обязателен: без него сервер не знает, какой сайт вы просите, и на машине с десятком доменов отдаст сертификат первого попавшегося. Половина ложных диагнозов рождается именно здесь.

Неполная цепочка: самая частая и самая коварная причина

Сертификат вашего сайта подписан не корневым центром напрямую, а промежуточным. Клиент должен построить путь от вашего сертификата до корня, которому доверяет система. Промежуточные сертификаты обязан прислать сервер — их нет ни в браузере, ни в операционной системе.

Коварство в том, что десктопный Chrome умеет самостоятельно догружать недостающее звено по ссылке внутри сертификата и маскирует проблему. А вот кто не умеет: Android-браузеры, мобильные приложения, curl и wget, серверы платёжных шлюзов, вебхуки CRM, парсеры поисковых систем. Классическая картина — «у меня всё открывается, но клиенты жалуются, а оплата не проходит».

Причина почти всегда одна: в конфиг подставлен файл только с сертификатом сайта. Правильно так:

В cPanel и ISPmanager есть отдельное поле для цепочки (CA bundle) — если оно пустое, вы получите ровно эту ошибку.

Ошибки конфигурации nginx

Второй по частоте источник проблем — сам конфиг. Проверяйте по списку:

  1. Забыли перезагрузить сервер. Файлы обновились, процесс держит старые в памяти. Лечится: sudo nginx -t && sudo systemctl reload nginx.
  2. Домена нет ни в одном server_name. Запрос попадает в блок с default_server, и клиент получает сертификат чужого сайта — отсюда ERR_CERT_COMMON_NAME_INVALID.
  3. Разные конфиги для www и без www. Один блок с сертификатом, второй — со старым или без. Проверяйте оба адреса отдельно.
  4. Дублирующиеся блоки на 443 порту. nginx возьмёт первый подходящий, и это может быть не тот, который вы правили.
  5. Ключ не соответствует сертификату — бывает после ручной замены файлов. Сверьте отпечатки: openssl x509 -noout -modulus -in cert.pem | openssl md5 и openssl rsa -noout -modulus -in privkey.pem | openssl md5 должны совпасть.
  6. Права на файл ключа. nginx не стартует или падает в ошибку, если не может прочитать privkey.pem.
  7. Устаревшие протоколы. Оставленные TLS 1.0 и 1.1 вызывают ошибки у современных клиентов и претензии сканеров безопасности: держите ssl_protocols TLSv1.2 TLSv1.3;.

Если сайт живёт в контейнере или за балансировщиком, добавьте ещё один слой проверки: сертификат мог обновиться на хосте, но приложение внутри контейнера продолжает держать старую копию до перезапуска. Мы такие вещи вылавливаем при сопровождении серверов — сценарий обновления должен явно перечитывать конфигурацию везде, где сертификат используется.

Когда проблема не на сервере

Прежде чем перекапывать конфиг, исключите внешние причины:

Порядок починки и финальная проверка

Рабочая последовательность: определить код ошибки → посмотреть выдачу openssl s_client → сверить имена и даты → проверить количество сертификатов в цепочке → найти блок nginx, который реально обслуживает домен → исправить пути → nginx -t → reload → повторить проверку через curl и с телефона. После починки обязательно пройдите сценарий оплаты и отправку формы: именно интеграции страдают от цепочки первыми, и именно их поломку замечают позже всего. Если сайт после переезда на https ещё и просел в поиске, отдельно проверьте редиректы и канонические адреса — это уже вопрос поискового продвижения, а не сервера. Как правильно ставить сертификат с нуля, разобрано в других материалах раздела о безопасности сайтов.

Почему сайт открывается на компьютере, но выдаёт ошибку на телефоне

Классический признак неполной цепочки сертификатов. Десктопный Chrome умеет догружать недостающий промежуточный сертификат самостоятельно, мобильные клиенты — нет. Проверьте, что в конфиге указан файл fullchain, а не только сертификат домена, и перезагрузите веб-сервер.

Что делать, если ошибка появилась сама по себе ночью

Почти наверняка истёк срок действия: сертификаты кончаются в конкретную минуту, независимо от того, спите вы или нет. Проверьте даты командой openssl, выпустите или продлите сертификат и разберитесь, почему не сработало автопродление — обычно виноват хук, который не перезагружает веб-сервер после обновления файлов.

Как проверить SSL, если сайт ещё не переключён на новый сервер

Обратитесь к серверу напрямую, указав нужное имя вручную: openssl s_client -connect IP:443 -servername example.ru. Так вы увидите, какой сертификат отдаст новая машина, ещё до правки DNS. Это стандартный шаг проверки перед переездом, чтобы не поймать ошибку в момент переключения.

Можно ли временно отключить проверку сертификата у посетителей

Нет, и пытаться не стоит. Пользователь может нажать «Перейти на сайт, небезопасно», но большинство закроет вкладку, а поисковые роботы и платёжные шлюзы обойдут сайт стороной. Единственное правильное решение — выпустить корректный сертификат: бесплатный делается за 5-15 минут.

Кто отвечает за ошибки сертификата — хостинг или подрядчик

На массовом хостинге со встроенным Let’s Encrypt — провайдер. На VPS и выделенном сервере — тот, кто администрирует сервер. Проблема в том, что во многих проектах эта зона не закреплена ни за кем, и об истёкшем сертификате узнают от клиента. Мониторинг сроков должен быть частью договора на поддержку.

Починим SSL и уберём причину, а не симптом

Найдём, где рвётся цепочка, приведём в порядок конфигурацию сервера и поставим мониторинг, чтобы ошибка не повторилась. Диагностика в рамках экспресс-проверки — бесплатно.

ПОЛУЧИТЬ БЕСПЛАТНЫЙ АУДИТ →

Читайте дальше