hostprofi.ru
Подобрать хостинг
Термин·буква S

SNI

краткое определение

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

SNI (Server Name Indication) — расширение протокола TLS, определённое в RFC 6066. При TLS Handshake клиент включает в сообщение Client Hello поле с именем целевого хоста. Сервер читает это имя до расшифровки и выбирает соответствующий SSL/TLS-сертификат.

Как работает

До SNI сервер не знал, какой виртуальный хост запрашивает клиент в момент TLS Handshake — HTTP-заголовок Host приходит только после установки соединения. Это означало: один IP-адрес = один сертификат. SNI решает проблему: клиент сообщает имя хоста в открытом виде в Client Hello, сервер выбирает нужный сертификат.

В Nginx SNI работает автоматически при настройке нескольких server-блоков с директивой ssl_certificate. Nginx читает SNI из TLS Handshake и выбирает соответствующий конфиг. Аналогично работает Apache mod_ssl и HAProxy.

Ограничение SNI: поле server_name в Client Hello передаётся в открытом тексте и видно пассивному наблюдателю сети. Это раскрывает, какой сайт посещает пользователь, даже без перехвата трафика. Протокол Encrypted Client Hello (ECH, бывший ESNI) шифрует это поле и разрабатывается IETF как решение.

История

SNI предложен в 2003 году (RFC 3546), обновлён RFC 4366 (2006) и RFC 6066 (2011). Первые браузеры получили поддержку SNI: Firefox 2.0 (2006), Opera 8.0 (2005), Safari 2.1 (2008), Internet Explorer 7 (2006). В 2022 году поддержку SNI можно считать универсальной — исключение только очень старые системы (Windows XP IE8 без SNI, Android 2.x).

Связь с хостингом

SNI — основа виртуального хостинга для HTTPS. Без SNI каждый HTTPS-сайт требовал отдельного IP-адреса. С SNI один VPS с одним IP может обслуживать тысячи HTTPS-сайтов. Все современные хостинг-панели (cPanel, ISPmanager, Plesk) используют SNI при добавлении SSL к виртуальным хостам. Let's Encrypt HTTP-01 challenge не требует дополнительных IP благодаря SNI.

Как работает SNI

SNI (Server Name Indication) — расширение TLS (RFC 6066). Клиент в первом сообщении ClientHello указывает имя домена. Сервер выбирает соответствующий SSL-сертификат. Без SNI — на одном IP только один SSL-сертификат. С SNI — сотни сайтов на одном IP.

Поддержка SNI

SNI поддерживают все современные браузеры и ОС (Windows XP не поддерживает). Nginx: SNI работает по умолчанию при наличии нескольких ssl-сертификатов в разных vhost. В Apache: SSLStrictSNIVHostCheck off для старых клиентов.

SNI и виртуальный хостинг

SNI сделал возможным HTTPS-виртуальный хостинг (shared hosting с SSL). До SNI для HTTPS требовался отдельный IP-адрес. Теперь тысячи сайтов разделяют один IP с разными SSL-сертификатами. Encrypted Client Hello (ECH) — эволюция SNI: шифрует сам hostname для privacy.

Encrypted Client Hello (ECH)

ECH (RFC-draft, 2024) — следующий шаг после SNI: шифрует hostname в ClientHello с помощью публичного ключа сервера, полученного через DNS (HTTPS record). Cloudflare реализует ECH. Без ECH: ISP видит домен в SNI даже при HTTPS. С ECH: только зашифрованный innerClientHello.

SNI в облачных балансировщиках

AWS ALB, Azure Application Gateway, Yandex Application Load Balancer — поддерживают SNI для нескольких SSL-сертификатов. Один балансировщик обслуживает десятки доменов с разными сертификатами. Хранение сертификатов в AWS Certificate Manager или Azure Key Vault — ротация без перезапуска.

Другие термины

SNI — что это, определение и как работает | Справочник — hostprofi.ru