Перейти к содержимому

Что такое SNI и зачем он нужен HTTPS

SNI — небольшая часть TLS, без которой современный интернет выглядел бы гораздо неудобнее. Благодаря SNI на одном IP могут нормально работать множество HTTPS-сайтов с разными сертификатами. Проблема до SNI Представьте один сервер…

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

Проблема до SNI

Представьте один сервер:

203.0.113.25

На нём работают:

site-a.ru
site-b.ru
site-c.ru

У каждого свой TLS-сертификат.

Когда начинается TLS, HTTP ещё нет

Серверу нужно выбрать сертификат до того, как он увидит обычный HTTP Host header.

Для этого и существует SNI

SNI означает Server Name Indication.

Клиент во время TLS-handshake сообщает имя сервера, к которому хочет подключиться.

Упрощённо

Клиент:
хочу site-b.ru

Сервер:
тогда вот сертификат site-b.ru

Что происходит без SNI

Сервер может показать default certificate.

Если он выпущен для другого сайта, появится ошибка hostname mismatch.

Почему openssl нужно запускать с -servername

Неправильная проверка:

openssl s_client -connect site-b.ru:443

Более правильная для обычного виртуального HTTPS-хостинга:

openssl s_client \
-connect site-b.ru:443 \
-servername site-b.ru

SNI и IP-адрес

Когда вы открываете HTTPS прямо по IP, нормального доменного SNI может не быть. Поэтому сервер показывает не тот сертификат, который вы ожидали.

Это не означает, что сайт сломан

HTTPS-сайт нужно проверять с его настоящим hostname.

curl --resolve

curl --resolve site-b.ru:443:203.0.113.25 \
https://site-b.ru/

Команда подключится к заданному IP, но сохранит правильное доменное имя и SNI.

SNI при миграции

Это один из лучших способов проверить новый сервер до смены DNS.

Nginx и server_name

На стороне веб-сервера тоже должна быть правильная конфигурация virtual host.

SNI сообщает имя, но сервер ещё должен знать, какой certificate и конфигурацию ему сопоставить.

SNI и CDN

CDN также обслуживает огромное количество доменов на общей инфраструктуре, поэтому выбор сертификата по имени является обычной частью работы HTTPS.

Старые клиенты

Совсем старые реализации TLS могли не поддерживать SNI. Сегодня для обычного современного веба это уже редкость.

SNI шифруется?

Исторически имя в ClientHello могло быть видно наблюдателю сети. Для улучшения конфиденциальности развивается ECH — Encrypted ClientHello.

SNI и DNS — разные вещи

DNS отвечает, куда подключаться.

SNI сообщает серверу, к какому имени пользователь пытается обратиться.

Как NexIP помогает

SSL-проверка обязательно должна использовать корректный SNI, иначе результат для shared hosting может быть ложным.

FAQ

Можно несколько HTTPS-сайтов на одном IP?

Да. Это совершенно стандартная схема.

Почему по IP показывается чужой сертификат?

Скорее всего сервер выбрал default virtual host из-за отсутствия нужного hostname/SNI.

SNI относится к HTTP?

Нет, он передаётся на уровне TLS до обычного HTTP-запроса.

Диагностика NexIP

Продолжите реальной проверкой

Откройте полный раздел диагностики и проверьте сайт, домен или сетевые параметры.

Открыть диагностику

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

Материалы по теме

SSL-сертификаты

Почему браузер пишет «Подключение не защищено»

Сообщение «Подключение не защищено» не обязательно означает, что сайт заражён или вас прямо сейчас взламывают. Оно означает, что браузер не смог нормально подтвердить защищённость HTTPS-соединения. Причин несколько — от банально…

Читать
SSL-сертификаты

Сертификат SSL не соответствует домену: почему так бывает

Ошибка «сертификат не соответствует имени сайта» означает буквально то, что написано: браузер подключился к серверу, получил сертификат, но не нашёл в нём домен, который пользователь открыл. Простой пример Открываем: api.example.com а…

Читать
Вернуться в базу знаний