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
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
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 prohlížečů
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
Knihovny
- 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
Následující kombinace nepodporují SNI
Reference
- 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