Nodea — logo

SNI

SNI (ang. Server Name Indication) to rozszerzenie protokołu TLS, dzięki któremu jeden serwer może obsługiwać wiele witryn HTTPS z odrębnymi certyfikatami SSL pod tym samym adresem IP. Rozwiązuje ono fundamentalny problem: bez SNI szyfrowane połączenie musiało być nawiązane, zanim serwer dowiedział się, o którą domenę chodzi — więc jeden adres IP mógł podać tylko jeden certyfikat.

Jak działa SNI

W tradycyjnym połączeniu HTTPS klient najpierw negocjuje szyfrowanie, a dopiero potem wysyła nagłówek z nazwą domeny. Problem w tym, że serwer musi przedstawić certyfikat już na etapie negocjacji — nie wiedząc jeszcze, o którą witrynę pyta klient. SNI rozwiązuje to, dołączając nazwę hosta do pierwszej wiadomości powitalnej (ClientHello), jeszcze przed zaszyfrowaniem kanału.

Serwer odczytuje przekazaną nazwę, dopasowuje do niej właściwy certyfikat i dopiero wtedy kontynuuje uzgadnianie HTTPS. Warto wiedzieć, że w klasycznym SNI nazwa domeny podróżuje jawnym tekstem — dlatego powstało rozszerzenie Encrypted SNI (ESNI) oraz nowsze Encrypted Client Hello (ECH), które ukrywają tę informację przed podsłuchem.

Zastosowanie w praktyce

SNI jest dziś fundamentem hostingu współdzielonego i wirtualnego. Pozwala umieścić setki witryn HTTPS na pojedynczym adresie IP, co oszczędza kurczącą się pulę adresów IPv4 i obniża koszty. Dostawcy hostingu i sieci CDN opierają na nim serwery wirtualne (virtual hosts), a bez tego mechanizmu każda domena z certyfikatem wymagałaby osobnego, dedykowanego adresu IP. Dla właściciela strony SNI działa całkowicie w tle — po prostu instaluje certyfikat, a serwer sam zadba o podanie właściwego przy każdym żądaniu. Mechanizm ten wykorzystują też serwery proxy, load balancery i bramy API, aby na podstawie żądanej nazwy hosta skierować ruch do właściwej usługi jeszcze przed pełnym nawiązaniem sesji szyfrowanej. Choć klasyczny SNI ujawnia nazwę domeny w postaci jawnej, jego rola pozostaje fundamentalna dla całego współczesnego HTTPS — bez niego skalowanie bezpiecznego hostingu w obecnej postaci byłoby po prostu niemożliwe.

Powiązane pojęcia

Najczęstsze pytania

Czy dzięki SNI jeden adres IP obsłuży wiele certyfikatów SSL?

Tak. SNI był stworzony właśnie po to, by na jednym adresie IP działało wiele witryn HTTPS, każda z własnym certyfikatem. Przeglądarka podaje nazwę hosta na starcie połączenia, a serwer wybiera odpowiedni certyfikat. To rozwiązanie standardowe we współczesnym hostingu współdzielonym.

Czy wszystkie przeglądarki obsługują SNI?

Praktycznie wszystkie używane dziś przeglądarki i systemy obsługują SNI — problem dotyczył jedynie bardzo starych klientów, jak Internet Explorer na Windows XP. W praktyce można więc zakładać, że SNI jest dostępny dla całego realnego ruchu.