Server Name Indication

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledá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 pro vývojovou 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, dnes TLS/SNI podporuje Apache 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]. . (CAcert Wik.) Dostupné online.  
  4. EdelKey Project [online]. . Dostupné online.  
  5. BRAND, Kaspar. TLS SNI Test Site [online]. 2009-03-29. Dostupné online.  
  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. Dostupné online.  
  11. TLS Extensions
  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
  15. NSS Roadmap (as of 11 September 2009)
  16. Support TLS SNI extension in ssl module