SNI: что это и зачем нужно Server Name Indication | Глоссарий FREEHOSTING

SNI

Server Name Indication
SNI — SNI (Server Name Indication) — расширение протокола TLS, позволяющее клиенту указывать доменное имя сервера при установке защищённого соединения. Это необходимо для обслуживания нескольких SSL-сертификатов на одном IP-адресе.

Определение простыми словами

SNI — это технология, которая позволяет серверу безопасно обслуживать несколько сайтов с разными SSL-сертификатами на одном IP-адресе. Во время начала TLS-сессии клиент сообщает имя сервера, к которому хочет подключиться, что даёт возможность точно подобрать нужный сертификат без ошибок безопасности.

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

Сравнение

Функция Без SNI С SNI
Обслуживание нескольких сертификатов на одном IP Нет Да
Требуется отдельный IP для каждого сертификата Да Нет
Совместимость с современными браузерами Ограниченная Широкая
Использование с виртуальными хостами Очень сложно Простое

Кейсы использования

  • Обслуживание нескольких HTTPS-сайтов на одном VPS или VDS с одним IP-адресом.
  • Виртуальные хостинги, где на одном сервере размещается множество доменов с SSL.
  • Использование в CDN и балансировщиках нагрузки для управления сертификатами разных сайтов.
  • Создание безопасных окружений для микросервисов и приложений с разными доменными именами.
  • Негативный пример: Старые браузеры или устройства, которые не поддерживают SNI, не смогут корректно установить TLS-соединение и увидят ошибку сертификата.

Технические детали

SNI добавляет в TLS ClientHello расширение, в котором указывается доменное имя (hostname) сервера, к которому клиент хочет подключиться. Сервер считывает это имя и выбирает соответствующий SSL-сертификат для TLS Handshake.

Пример ClientHello с SNI:

ClientHello {
  version = TLS 1.2
  random = ...
  session_id = ...
  extensions {
    server_name = "example.com"
  }
  ...
}

SNI поддерживается во всех современных версиях OpenSSL, Nginx, Apache и других серверах. Без SNI чтобы обслуживать разные сертификаты, на каждый нужен отдельный IP-адрес.

Подробнее об SNI можно узнать в наших материалах по протоколам TCP/IP и настройке Nginx. Также рекомендуем ознакомиться с SSL/TLS как фундаментом безопасности.

Частые вопросы

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

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

Поддерживается ли SNI всеми браузерами?

Большинство современных браузеров поддерживают SNI, однако устаревшие версии могут не распознавать его, вызывая ошибки сертификата.

Можно ли использовать SNI без выделенного IP-адреса?

Да, SNI позволяет обслуживать несколько доменов с разными сертификатами на одном IP-адресе.