SSL/TLS и сертификаты Windows 10Windows 11LinuxmacOS

HTTPS и сертификаты: При HTTPS соединении сервер выбирает сертификат другого сайта по SNI

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

При размещении нескольких сайтов на одном IP сервер выбирает сертификат по имени SNI из TLS-запроса. Если нужный виртуальный узел не настроен, попал не в тот блок server или запрос проходит через другой прокси, браузер получает сертификат соседнего сайта. Проверять необходимо конкретный домен и точку завершения TLS.

В этой статье
  1. Что происходит и как отличить проблему
  2. Возможные причины
  3. Пошаговая проверка и устранение
  4. Проверка результата и дальнейшие действия

#Что происходит и как отличить проблему

При размещении нескольких сайтов на одном IP сервер выбирает сертификат по имени SNI из TLS-запроса. Если нужный виртуальный узел не настроен, попал не в тот блок server или запрос проходит через другой прокси, браузер получает сертификат соседнего сайта. Проверять необходимо конкретный домен и точку завершения TLS.

#Возможные причины

Возможная причинаКак узнатьЧто делать
Нет совпадающего виртуального узлаserver_name нужного домена отсутствует либо адрес прослушивания неверен.Сервер отдаёт сертификат default_server.Проверить настройки узла и имени SNI.
TLS завершается в прокси или CDNНа исходном сервере всё верно, извне приходит чужой сертификат.Проблема возникает только при внешнем доступе.Проверить настройки промежуточного узла.

#Пошаговая проверка и устранение

  1. Зафиксируйте чужой сертификат и адрес подключенияОткройте https://site.example.com (подставьте свой домен) и сохраните точную формулировку предупреждения, не обходя его. Если DNS включает несколько A/AAAA адресов, ошибка может возникать не на каждом узле. Посмотрите в кабинете DNS, куда указывает имя, и сохраните текущие значения.
  2. Сравните выдачу с правильным SNIНа Linux/macOS с OpenSSL откройте «Терминал» и выполните echo | openssl s_client -connect site.example.com:443 -servername site.example.com -showcerts. Замените оба имени на проверяемое, права администратора не нужны. -servername передаёт имя для выбора сайта, -connect задаёт сервер и порт. По первому сертификату и SAN проверьте, соответствует ли он домену. Если OpenSSL не установлен, используйте просмотр сертификата браузером или панель хостинга.
  3. Проверьте конфигурацию нужного сайтаЕсли вы администратор nginx, сохраните конфигурационные файлы и откройте только предназначенный для этого сайта server-блок с listen 443 ssl, server_name и директивами ssl_certificate/ssl_certificate_key. Не копируйте сертификат соседнего сайта и не показывайте приватный ключ. Сверьте IPv4 и IPv6 слушающие адреса, а также default_server и подключённые конфигурации.
  4. Проверьте изменения до примененияПосле точечного исправления привязки сертификата выполните на Linux-сервере sudo nginx -t. Команда требует прав администратора и только проверяет конфигурацию; при ошибке исправьте её по тексту сообщения. Если тест успешен, через сервисный менеджер выполните согласованное обновление конфигурации, не останавливая сайт надолго. Если Nginx не управляет внешним TLS, настройку делайте в панели CDN/балансировщика.
  5. Проверьте разные адреса и откатСнова проверьте HTTPS-домен через браузер и OpenSSL из внешней сети. Если у DNS несколько A/AAAA, убедитесь, что каждый обслуживающий узел имеет нужный сертификат. Проверьте соседние сайты на том же IP. Если они сломались, верните сохранённые server-блоки и выполните nginx -t перед повторным применением.
  6. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Терминал Linux/macOS с OpenSSL; два site.example.com заменить своим адресом.
    Linux · Терминал (Bash)Команда
    Терминал Linux/macOS с OpenSSL; два site.example.com заменить своим адресом. Команда получает публичную цепочку с учётом SNI, не исправляет сервер.
    echo | openssl s_client -connect site.example.com:443 -servername site.example.com -showcerts
    Вариант 2На самом Linux-сервере nginx; sudo запрашивает административные права, -t проверяет конфигурацию до примене…
    Linux · Терминал (Bash)КомандаНужен sudo
    На самом Linux-сервере nginx; sudo запрашивает административные права, -t проверяет конфигурацию до применения. Если тест не пройден, изменения не активировать.
    sudo nginx -t

#Проверка результата и дальнейшие действия

Успех — правильный сертификат выбирается при указании целевого имени SNI, все сайты на общем IP продолжают работать и браузер не предупреждает о несовпадении имени. Если при обращении по голому IP сертификат другой, это не обязательно ошибка SNI.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.