Server Name Indication
Server Name Indication (zkratka SNI) je v informatice metoda, jak obejít nedostatek v protokolu SSL v2, který neumožňuje při přístupu přes HTTPS vytvářet virtuální webové servery – tj. více různých doménových jmen umístěných na jedné IP adrese (využívá se při webhostingu). Pomocí SNI může klient před výměnou šifrovacích klíčů nejprve sdělit jméno požadovaného webového serveru a server tak může vybrat příslušný šifrovací klíč požadovaného virtuálního serveru.
Popis problému[editovat | editovat zdroj]
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. démon), který na síťovém rozhraní naslouchá a čeká na požadavky, které přicházejí od klienta (typicky webový prohlížeč). Každý požadavek klienta je vyřízen tak, že jsou mu odeslána nějaká data (webová stránka, obrázek, zvuk…). Žádosti i odpovědi jsou realizovány pomocí protokolu HTTP.
U verze protokolu HTTP 0.9 se předpokládalo, že na jednom počítači budou webové stránky jediného doménového jména. V následující verzi byla do protokolu HTTP přidána podpora tzv virtuálních serverů, kdy je klient schopen sdělit serveru v rámci protokolu HTTP doménové jméno (v položce Host: v záhlaví 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 HTTPS přidal možnost šifrování přenášených dat jednoduše tak, že se všechna přenášená data zašifrují pomocí SSL nebo TLS. V tomto okamžiku však vzniká problém, protože připojí-li se klient k webovému serveru pomocí HTTPS, dojde ihned na začátku komunikace mezi klientem a serverem k výměně šifrovacích klíčů, které však obsahují i identifikaci serveru, jako je doménové jméno, majitel, adresa, digitální podpis, atd. (viz digitální certifikát a PKI). Veškerá následující komunikace je tedy již zašifrována, avšak teprve pak je klient pomocí protokolu HTTP schopen serveru sdělit, z jakého virtuálního serveru by chtěl data získat. Šifrované spojení je již však navázáno, klíče není možné změnit a klient musí ohlásit, že se neshodují údaje v certifikátu s doménovým jménem serveru uvedeným v URL požadované stránky.
Proto musí každý webový server, který chce využívat HTTPS, mít svoji vlastní IP adresu. Chceme-li však používat s protokolem HTTPS virtuální webové servery (stejně jako u HTTP), je nutné použít zde popsané SNI (na jediné IP adrese pak mohou být webové servery s různými doménovými jmény).
Historie[editovat | editovat zdroj]
V roce 2005 se zjistilo, že není jednoduchý způsob jak upgradovat SSL v2 na TLS[1], proto internetové stránky musely aktualizovat svůj software. Mozilla oznámila kompletní ukončení podpory SSL v2[2] v nové verzi Firefoxu. Společnost Firefox potom přesvědčila majitele zbylých 2000 stránek, aby aktualizovaly jejich servery na SSL v3 nebo TLS v1.
Od roku 2005, Certifikační autorita (CA) začala experimentovat s různými způsoby užívání TLS na virtuálních serverech.[3] Většina experimentů byla dosud ovšem neuspokojivých, nebo velice nepraktických. Například je možné použít Alternativního názvu předmětu pro obsažení více domén v jediném certifikátu, 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 musí být potom při každé změně seznamu domén znovu vydán.
V roce 2004 projekt EdelKey[4] vytvořil patch pro TLS/SNI do OpenSSL. Následně v roce 2006 byl tento patch použit ve vývojové větvi OpenSSL a v roce 2007 opět využit pro OpenSSL 0.9.8. EdelKey také začal vyvíjel patch pro Apache HTTP Server a ten dnes TLS/SNI podporuje s moduly gnutls a ssl.
Podpora[editovat | editovat zdroj]
Podpora prohlížečů[editovat | editovat zdroj]
Software | Typ | Podporováno | Poznámky | Podporováno od |
---|---|---|---|---|
Alpine (email client) | IMAP email client | ![]() |
Od verze 2.22[6] | 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.0 | 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[7][8] | |
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 |
IBM HTTP Server | Webový server | ![]() |
Od verze 9.0.0[9][10] | |
Apache Tomcat | Webový server | ![]() |
Není podporováno před 8.5 (backport na 9) | |
Apache HTTP Server | 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.0.1 | 2020 |
Qt | Library | ![]() |
Od verze 4.8 | 2011 |
Mozilla NSS server side | Library | ![]() |
[11] | |
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.0.0.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[editovat | editovat zdroj]
- Apache 2.2.12 nebo novější s podporou mod_gnutls nebo mod_ssl[12][13][14]
- Cherokee, jestliže je kompilovaný s TLS podporou
- Nové verze lighttpd 1.4.x a 1.5.x[15]
- Nginx doprovázený vestavěným OpenSSL s SNI podporou
- Microsoft IIS 8 – Ve Windows Server 8 Beta je již podpora vazeb s SNI[16]
Knihovny[editovat | editovat zdroj]
- NameGerson NSS
- OpenSSL
- 0.9.8f – zkompilované s volbou
--enable-tlsext
- verze 1.0.0 obsahuje podporu SNI
- 0.9.8f – zkompilované s volbou
- GNU TLS[17]
Nepodporované operační systémy a prohlížeče[editovat | editovat zdroj]
Následující kombinace nepodporují SNI
- Windows XP a Internet Explorer 6,7 a 8
- Konqueror/KDE nižší než 4.7 [18]
- Microsoft Internet Information Server IIS do verze 7 (včetně)
Knihovny[editovat | editovat zdroj]
Reference[editovat | editovat zdroj]
- ↑ TLS Server Name Indication [online]. (Paul’s Journal). Dostupné online.
- ↑ MARKHAM, Gervase. SSL2 must die: help wanted [online]. [cit. 2009-11-03]. Dostupné v archivu pořízeném dne 2009-06-01.
- ↑ CAcert VHostTaskForce [online]. [cit. 2009-11-03]. (CAcert Wik). Dostupné v archivu pořízeném dne 2009-08-22.
- ↑ EdelKey Project [online]. Dostupné online.
- ↑ CAcert VHostTaskForce [online]. [cit. 2008-10-27]. Dostupné v archivu pořízeném z originálu dne 22 August 2009. (anglicky)
- ↑ https://repo.or.cz/alpine.git/commit/08fcd1b86979b422eb586e56459d6fe15333e500
- ↑ Bug 765064 — HttpClient in use by Sync and other services doesn't support SNI [online]. 29 October 2017 [cit. 2017-11-09]. Dostupné online. (anglicky)
- ↑ Bug 1412650 — Switch services.* code to use HttpsURLConnection [online]. 29 October 2017 [cit. 2017-11-09]. Dostupné online. (anglicky)
- ↑ IBM HTTP Server SSL Questions and Answers [online]. IBM [cit. 2011-03-08]. Dostupné online. (anglicky)
- ↑ IHS 8 powered by Apache 2.2.x ? [online]. IBM, 17 October 2013 [cit. 2017-11-09]. Dostupné v archivu pořízeném z originálu dne 26 December 2015. (anglicky)
- ↑ Bug 360421 — Implement TLS Server Name Indication for servers [online]. 11 November 2006 [cit. 2012-10-30]. Dostupné online. (anglicky)
- ↑ Bug 34607: Support for Server Name Indication [online]. Apache Software Foundation. Dostupné online.
- ↑ Revision 776281: adding support for Server Name Indication to the Apache 2.2.x branch [online]. Apache Software Foundation. Dostupné online.
- ↑ CHANGES: Server Name Indication support is listed under the changes for Apache 2.2.12 [online]. Apache Software Foundation. Dostupné online.
- ↑ #386 (TLS servername extension (SNI) for namebased TLS-vhosts) - lighttpd - Trac
- ↑ Řešení problému s hostováním více https webů na Windows [online]. Petr Barták, Uzuzu-cz [cit. 2012-03-06]. Dostupné v archivu pořízeném dne 2012-03-13.
- ↑ Server name indication (GnuTLS 3.6.2). www.gnutls.org [online]. [cit. 2018-07-13]. Dostupné online.
- ↑ Bug 122433 - Server Name Identification support
- ↑ 188841 - It would be useful if QSslSocket supports TLS extensions such as Server Name Indication as per RFC 3546[nedostupný zdroj]
- ↑ Qt Patch and merge request. qt.gitorious.org [online]. [cit. 2009-11-03]. Dostupné v archivu pořízeném dne 2009-11-09.
- ↑ NSS Roadmap (as of 11 September 2009)
- ↑ Support TLS SNI extension in ssl module