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čů

Podpora SNI[5]
SoftwareTypPodporovánoPoznámkyPodporováno od
Alpine (email client)IMAP email clientAnoOd verze 2.22[6]2019-02-18
Internet ExplorerWebový prohlížečAnoOd verze 7 on Vista (Není podporováno na XP)2006
EdgeWebový prohlížečAnoVšechny verze
Mozilla FirefoxWebový prohlížečAnoOd verze 2.02006
cURLCommand-line tool and libraryAnoOd verze 7.18.12008
SafariWebový prohlížečAnoNení podporováno na Windows XP
Google ChromeWebový prohlížečAno2010
BlackBerry 10Webový prohlížečAnoPodporováno od BB10 vydání2013
BlackBerry OSWebový prohlížečNení podporováno in 7.1 a dřívějších
Windows MobileWebový prohlížečOd verze 6.5
Android default browserWebový prohlížečAnoHoneycomb (3.x) for tablets and Ice Cream Sandwich (4.x) for phones2011
Firefox for AndroidWebový prohlížeččástečněPodporováno při prohlížení. Synchronozace a další nepodporují SNI[7][8]
wgetCommand-line toolAnoOd verze 1.142012
Nokia Browser for SymbianWebový prohlížečNe
Opera Mobile for SymbianWebový prohlížečNeNení podporováno na Series60
DilloWebový prohlížečAnoOd verze 3.12016
IBM HTTP ServerWebový serverAnoOd verze 9.0.0[9][10]
Apache TomcatWebový serverAnoNení podporováno před 8.5 (backport na 9)
Apache HTTP ServerWebový serverAnoOd verze 2.2.122009
Microsoft IISWebový serverAnoOd verze 82012
nginxWebový serverAnoOd verze 0.5.232007
JettyWebový serverAnoOd verze 9.3.02015
HCL DominoWebový serverAnoOd verze 11.0.12020
QtLibraryAnoOd verze 4.82011
Mozilla NSS server sideLibraryNe[11]
4th DimensionLibraryNeNení podporováno in 15.2 or earlier
JavaLibraryAnoOd verze 1.72011
ColdFusion / LuceeLibraryAnoColdFusion Od verze 10 Update 18, 11 Update 7, Lucee Od verze 4.5.1.019, Version 5.0.0.502015
ErlangLibraryAnoOd verze r172013
GoLibraryAnoOd verze 1.42011
PerlLibraryAnoSince Net::SSLeay version 1.50 and IO::Socket::SSL version 1.562012
PHPLibraryAnoOd verze 5.32014
PythonLibraryAnoPodporová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
RubyLibraryAnoOd verze 2.0 (in net/http)2011
HiawathaWebový serverAnoOd verze 8.62012

Servery

  • 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

  • NameGerson NSS
  • OpenSSL
    • 0.9.8f – zkompilované s volbou --enable-tlsext
    • verze 1.0.0 obsahuje podporu SNI
  • GNU TLS[17]

Nepodporované operační systémy a prohlížeče

Následující kombinace nepodporují SNI

Knihovny

Reference

  1. TLS Server Name Indication [online]. (Paul’s Journal). Dostupné online.
  2. MARKHAM, Gervase. SSL2 must die: help wanted [online]. [cit. 2009-11-03]. Dostupné v archivu pořízeném dne 2009-06-01.
  3. CAcert VHostTaskForce [online]. [cit. 2009-11-03]. (CAcert Wik). Dostupné v archivu pořízeném dne 2009-08-22.
  4. EdelKey Project [online]. Dostupné online.
  5. CAcert VHostTaskForce [online]. [cit. 2008-10-27]. Dostupné v archivu pořízeném z originálu dne 22 August 2009. (anglicky)
  6. https://repo.or.cz/alpine.git/commit/08fcd1b86979b422eb586e56459d6fe15333e500
  7. 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)
  8. Bug 1412650 — Switch services.* code to use HttpsURLConnection [online]. 29 October 2017 [cit. 2017-11-09]. Dostupné online. (anglicky)
  9. IBM HTTP Server SSL Questions and Answers [online]. IBM [cit. 2011-03-08]. Dostupné online. (anglicky)
  10. 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)
  11. Bug 360421 — Implement TLS Server Name Indication for servers [online]. 11 November 2006 [cit. 2012-10-30]. Dostupné online. (anglicky)
  12. Bug 34607: Support for Server Name Indication [online]. Apache Software Foundation. Dostupné online.
  13. Revision 776281: adding support for Server Name Indication to the Apache 2.2.x branch [online]. Apache Software Foundation. Dostupné online.
  14. CHANGES: Server Name Indication support is listed under the changes for Apache 2.2.12 [online]. Apache Software Foundation. Dostupné online.
  15. #386 (TLS servername extension (SNI) for namebased TLS-vhosts) - lighttpd - Trac
  16. Ř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.
  17. Server name indication (GnuTLS 3.6.2). www.gnutls.org [online]. [cit. 2018-07-13]. Dostupné online.
  18. Bug 122433 - Server Name Identification support
  19. 188841 - It would be useful if QSslSocket supports TLS extensions such as Server Name Indication as per RFC 3546[nedostupný zdroj]
  20. Qt Patch and merge request. qt.gitorious.org [online]. [cit. 2009-11-03]. Dostupné v archivu pořízeném dne 2009-11-09.
  21. NSS Roadmap (as of 11 September 2009)
  22. Support TLS SNI extension in ssl module
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.