Skip to content
SSL-сертификаты
NEXIP / EDITORIAL STORY

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

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

NexIP editorialNexIP Published Reading time3 min Start reading
NEXIP JOURNAL Cover image
← Journal Что такое SNI и зачем он нужен HTTPS

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-запроса.

Thank you for reading

More practical guides are waiting in the NexIP journal.

NEXIP / DIAGNOSTICS

Verify what matters

Check a website, domain or network settings with real NexIP diagnostics.

Launch diagnostics

Continue reading

Related materials

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

SSL-сертификаты будут жить всего 47 дней: почему интернет готовят к большим переменам

Срок жизни SSL-сертификатов стремительно сокращается: сначала 200 дней, затем 100, а потом всего 47. Почему крупнейшие участники рынка толкают интернет к такому сценарию, что это изменит для владельцев сайтов и почему ручное продление HTTPS скоро станет пережитком прошлого.

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

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

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

Read
Back to knowledge base