Server Name Indication
Author
Albert FloresServer Name Indication (zkratka SNI) je v informatice rozšíření protokolu TLS, které zavádí v rámci url=HTTPS]komunikace podporu pro virtuální [[Webový server|webové servery[/url]] (tj. více různých doménových jmen na jednom počítači, resp. jedné IP adrese, což se využívá při webhostingu). Pomocí SNI předává klient webovému serveru doménové jméno svého požadavku ještě před zahájením šifrované komunikace, aby server mohl vybrat odpovídající certifikát se šifrovacím klíčem. Protože k předání doménového jména dojde ještě před zahájením šifrování, je možné odposlechnout, na jaký webový server se klient připojuje, což způsobilo narušení soukromí uživatelů a využíval to síťový filtrovací a monitorovací software a vlády k implementaci cenzury na internetu. Ochrana SNI proti odposlechu byla uvedena v roce 2018 v TLS 1.3 jako protokol ESNI (Encrypted SNI) a jeho nedostatky byly v roce 2020 odstraněny v novém protokolu ECH, jenž byl v roce 2023 byl začleněn do webových prohlížečů. ECH vyžaduje pro svoji funkci speciální záznam v DNS a webové prohlížeče k tomu vyžadují ještě zabezpečení DNS pomocí DoH (DNS-over-HTTPS).
Problematika
Webový server je počítač, který je připojen k Internetu a má proto svoji vlastní IP adresu. Na počítači je spuštěn speciální program (tzv. +more démon), který na síťovém rozhraní naslouchá a čeká na požadavky, které přicházejí od klienta (typicky webový prohlížeč). Klient si nejprve doménové jméno serveru (např. wikipedia. org) přeloží pomocí DNS na IP adresu. Pak klient naváže TCP spojení na IP adresu serveru a poté si mohou obousměrně vyměňovat data. Server vidí příchozí spojení z IP adresy klienta. Požadavek klienta je vyřízen tak, že klient v navázaném TCP spojení serveru sdělí, jaká data che poslat (webová stránka, obrázek, zvuk…) a server je následně klientovi ve stejném TCP spojení zašle. Komunikace webového klienta s webovým serverem probíhá pomocí protokolu HTTP.
Virtuální webové servery
U prvotní verze protokolu [url= 1. 0 přidána podpora tzv. +more virtuálních serverů, kdy může být na jednom fyzickém serveru s jednou [[IP adresa|IP adresou]url= [[Internetová doména|doménové jméno]url=, dojde hned na začátku komunikace k výměně [[Klíč (kryptografie)|šifrovacích klíčů][Hypertext Transfer Protocol|HTTP]] 0. 9 se předpokládalo, že na jednom počítači budou webové stránky jediného doménového jména. Protože to bylo nepraktické, byla ve verzi[/url]] hostováno více webových serverů (odlišných skupin webových stránek). Pro výběr správného virtuálního serveru sdělí klient v rámci protokolu[/url]] (v položce Host: v hlavičce dotazu) a server tak může odeslat odpověď z požadovaného virtuálního serveru. Tímto způsobem jsou nejen šetřeny IP adresy, ale je možné též ekonomicky sdružovat mnoho webových serverů na jediném počítači a obsluhovat je stejným programem.
Protokol url=HTTPS]přidal možnost [[Kryptografie|šifrování[/url]] přenášených dat tak, že se veškerá přenášená data jsou šifrována (pomocí SSL/TLS). Připojí-li se klient k webovému serveru pomocí[/url]], které však obsahují i identifikaci serveru (doménové jméno, organizace majitele, viz digitální certifikát a PKI), takže virtuální servery mívají různé šifrovací klíč (certifikáty). +more V okamžiku navázání komunikace tak server neví, jaký virtuální server bude klient požadovat a jaký certifikát se šifrovacím klíčem by mu měl poslat. Klient totiž název virtuálního serveru sděluje až po navázání šifrovaného spojení. Šifrované spojení je tak již však navázáno, klíče není možné změnit a klient proto uživateli ohlásí, že se neshodují údaje v certifikátu s doménovým jménem serveru uvedeným v adrese požadované stránky (URL).
Dočasná řešení
Od roku 2005 začaly certifikační autority (CA) experimentovat s různými způsoby užívání TLS na virtuálních serverech. Většina experimentálních řešení byla neuspokojivých nebo velice nepraktických. +more Například je možné v certifikátu vyplnit položku Alternativní názvy, aby certifikát podporoval více doménových jmen najednou, ale jelikož certifikát je jen jeden, znamená to, že všechny domény musí být vlastněny a řízeny jednou osobou. Certifikát by navíc musel být vždy znovu vydán při každé změně seznamu domén, pro které je platný.
Lepším dočasným řešením bylo, že každý webový server poskytující url=HTTPS](šifrovanou komunikaci), musel mít svoji vlastní [[IP adresa|IP adresu[/url]].
SNI
SNI (Server Name Indication) je rozšíření pro protokol TLS, pomocí kterého klient ještě před výměnou certifikátů (veřejných klíčů u asymetrické šifry) sdělí serveru doménové jméno svého připraveného požadavku a server tak může klientovi poslat certifikát odpovídajícího virtuálního serveru ještě před zahájením šifrování. Rozšíření SNI tím zavedlo u umožnilo podporu virtuálních webových serverů i pro HTTPS služby.
Encrypted SNI
Protože u SNI dojde k předání doménového jména ještě před zahájením šifrování, je možné odposlechnout, na jaký webový server se klient připojuje, což využíval filtrovací a monitorovací software a vlády k implementaci cenzury na internetu. Ochranu SNI proti odposlechu představilo v roce 2018 rozšíření ESNI (Encrypted SNI), které šifrovalo jen část komunikace Client Hello.
Encrypted Client Hello
Nedostatky ESNI odstranilo v roce 2020 rozšíření ECH (Encrypted Client Hello), jehož podpora byla roce 2023 začleněna do webových prohlížečů. Protokol ECH vyžaduje pro daný sever (doménu) v DNS RR záznam (HTTPS Resource Record, Type 65). +more Protože klienty by bylo možné dále sledovat odposlechem DNS dotazů, je pro podporu ECH v prohlížečích vyžadováno i šifrované DNS (DNS-over-HTTPS, DoH). Kvůli komplexnosti ECH protokolu není jeho využití na konci roku 2023 velké.
Historie
SNI bylo uvedeno v roce 2003 v RFC 3546. V roce 2004 projekt EdelKey vytvořil [url= Server][Aktualizace (software)|patch]] TLS/SNI do OpenSSL. +more V roce 2006 byl tento patch použit ve vývojové větvi OpenSSL a v roce 2007 začleněn do OpenSSL 0. 9. 8. EdelKey také vyvíjel patch pro [[Apache[/url]] a ten dnes TLS/SNI podporuje s moduly gnutls a ssl. V roce 2006 bylo SNI implementováno do webových prohlížečů.
V roce 2018 bylo v protokolu TLS 1. 3 uvedeno rozšíření ESNI (Encrypted SNI), které bylo začleněno do webového prohlížeče Mozilla Firefox. +more Protokol ESNI však trpěl nedostatky, a tak byl z Firefoxu odstraněn ve verzi 85 v prosinci 2020.
Nedostatky ESNI byly v roce 2020 odstraněny v novém protokolu ECH.
Oba protokoly ESNI a ECH jsou kompatibilní pouze s TLS 1. 3, protože využívají KeyShareEntry, která byla poprvé definována jako součást TLS 1. +more3. Při podpoře protokolu ECH nesmí klient pro komunikaci navrhovat nižší verzi TLS protokolu než 1. 3.
V srpnu 2020 začal Velký Čínský firewall blokovat provoz s ESNI, ale ECH zůstal povolen. V září 2020 plánovalo ruské ministerstvo cenzury Roskomnadzor zablokovat řadu šifrovaných protokolů včetně TLS 1. +more3 a ESNI, což před tím bránilo přístupu cenzury k webové komunikaci. V říjnu 2020 začal ruský ISP a jeho mobilní operátor Tele2 blokovat provoz s ESNI.
Na konci roku 2023 je ECH dostupný v prohlížečích Mozilla Firefox (od verze 118 vydané 26. září 2023), Google Chrome (od verze 118 vydané 10. +more října 2023) a Microsoft Edge (testovací verze) a je podporován webhostingem Cloudfare.
Podpora prohlížečů
Alpine (email client) | IMAP email client | Od verze 2. 22 | 2019-02-18 | |
---|---|---|---|---|
Internet Explorer | Webový prohlížeč | Od verze 7 on Vista (Není podporováno na XP) | 2006 | |
Edge | Webový prohlížeč | Všechny verze | ||
Mozilla Firefox | Webový prohlížeč | Od verze 2. +more0 | 2006 | |
cURL | Command-line tool and library | Od verze 7. 18. 1 | 2008 | |
Safari | Webový prohlížeč | Není podporováno na Windows XP | ||
Google Chrome | Webový prohlížeč | 2010 | ||
BlackBerry 10 | Webový prohlížeč | Podporováno od BB10 vydání | 2013 | |
BlackBerry OS | Webový prohlížeč | Není podporováno in 7. 1 a dřívějších | ||
Windows Mobile | Webový prohlížeč | Od verze 6. 5 | ||
Android default browser | Webový prohlížeč | Honeycomb (3. x) for tablets and Ice Cream Sandwich (4. x) for phones | 2011 | |
Firefox for Android | Webový prohlížeč | částečně | Podporováno při prohlížení. Synchronozace a další nepodporují SNI | |
wget | Command-line tool | Od verze 1. 14 | 2012 | |
Nokia Browser for Symbian | Webový prohlížeč | |||
Opera Mobile for Symbian | Webový prohlížeč | Není podporováno na Series60 | ||
Dillo | Webový prohlížeč | Od verze 3. 1 | 2016 | |
[url= Server][IBM[/url]] | Webový server | Od verze 9. 0 | ||
Apache Tomcat | Webový server | Není podporováno před 8. 5 (backport na 9) | ||
[url= Server][Apache[/url]] | Webový server | Od verze 2. 2. 12 | 2009 | |
Microsoft IIS | Webový server | Od verze 8 | 2012 | |
nginx | Webový server | Od verze 0. 5. 23 | 2007 | |
Jetty | Webový server | Od verze 9. 3. 0 | 2015 | |
HCL Domino | Webový server | Od verze 11. 1 | 2020 | |
Qt | Library | Od verze 4. 8 | 2011 | |
Mozilla NSS server side | Library | |||
4th Dimension | Library | Není podporováno in 15. 2 or earlier | ||
Java | Library | Od verze 1. 7 | 2011 | |
ColdFusion / Lucee | Library | ColdFusion Od verze 10 Update 18, 11 Update 7, Lucee Od verze 4. 5. 1. 019, Version 5. 50 | 2015 | |
Erlang | Library | Od verze r17 | 2013 | |
Go | Library | Od verze 1. 4 | 2011 | |
Perl | Library | Since Net::SSLeay version 1. 50 and IO::Socket::SSL version 1. 56 | 2012 | |
PHP | Library | Od verze 5. 3 | 2014 | |
Python | Library | Podporováno od 2. x na 2. 7. 9 a 3. x na 3. 2 (in ssl, urllib[2] and httplib modules) | 2011 for Python 3. x and 2014 for Python 2. x | |
Ruby | Library | Od verze 2. 0 (in net/http) | 2011 | |
Hiawatha | Webový server | Od verze 8. 6 | 2012 |
Servery
Apache 2. 2. +more12 nebo novější s podporou mod_gnutls nebo mod_ssl * Cherokee, jestliže je kompilovaný s TLS podporou * Nové verze lighttpd 1. 4. x a 1. 5. x * Nginx doprovázený vestavěným OpenSSL s SNI podporou * Microsoft IIS 8 - Ve Windows Server 8 Beta je již podpora vazeb s SNI.
Knihovny
NameGerson NSS * OpenSSL ** 0.9.8f - zkompilované s volbou --enable-tlsext ** verze 1.0.0 obsahuje podporu SNI * GNU TLS
Nepodporované operační systémy a prohlížeče
Následující kombinace nepodporují SNI
* Windows XP a Internet Explorer 6,7 a 8 * Konqueror/KDE nižší než 4.7 * Microsoft Internet Information Server IIS do verze 7 (včetně)
Knihovny
Qt * Mozilla NSS * Python
Odkazy
Reference
Externí odkazy
https://www. cloudflare. +morecom/ssl/encrypted-sni/ - kontrola podpory ECH ve webovém prohlížeči * https://www. reddit. com/r/CloudFlare/comments/171fvih/how_do_i_check_if_a_site_supports_the_newly/ - kontrola podpory ECH na webové adrese.