Server Name Indication

Z Wikipedie, otevřené encyklopedie
Skočit na navigaci Skočit na vyhledávání

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]

Prohlížeče[editovat | editovat zdroj]

Prohlížeče s podporou TLS server name indication[5]

Servery[editovat | editovat zdroj]

  • Apache 2.2.12 nebo novější s podporou mod_gnutls nebo mod_ssl[6][7][8]
  • Cherokee, jestliže je kompilovaný s TLS podporou
  • Nové verze lighttpd 1.4.x a 1.5.x[9]
  • Nginx doprovázený vestavěným OpenSSL s SNI podporou
  • Microsoft IIS 8 – Ve Windows Server 8 Beta je již podpora vazeb s SNI[10]

Knihovny[editovat | editovat zdroj]

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

Nepodporované operační systémy a prohlížeče[editovat | editovat zdroj]

Následující kombinace nepodporují SNI

Knihovny[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

  1. TLS Server Name Indication [online]. (Paul’s Journal). Dostupné online. 
  2. MARKHAM, Gervase. SSL2 must die: help wanted [online]. Dostupné online. 
  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. BRAND, Kaspar. TLS SNI Test Site [online]. 2009-03-29 [cit. 2009-11-03]. Dostupné v archivu pořízeném dne 2012-11-22. 
  6. Bug 34607: Support for Server Name Indication [online]. Apache Software Foundation. Dostupné online. 
  7. Revision 776281: adding support for Server Name Indication to the Apache 2.2.x branch [online]. Apache Software Foundation. Dostupné online. 
  8. CHANGES: Server Name Indication support is listed under the changes for Apache 2.2.12 [online]. Apache Software Foundation. Dostupné online. 
  9. #386 (TLS servername extension (SNI) for namebased TLS-vhosts) - lighttpd - Trac
  10. Ř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. 
  11. Server name indication (GnuTLS 3.6.2). www.gnutls.org [online]. [cit. 2018-07-13]. Dostupné online. 
  12. Bug 122433 - Server Name Identification support
  13. 188841 - It would be useful if QSslSocket supports TLS extensions such as Server Name Indication as per RFC 3546
  14. Qt Patch and merge request. qt.gitorious.org [online]. [cit. 2009-11-03]. Dostupné v archivu pořízeném dne 2009-11-09. 
  15. NSS Roadmap (as of 11 September 2009)
  16. Support TLS SNI extension in ssl module