Server Name Indication

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Server Name Indication (SNI) ist eine Erweiterung des Standards Transport Layer Security (TLS), die es ermöglicht, dass sich mehrere verschlüsselt abrufbare Websites unterschiedlicher Domains einen Server auf dem TLS Port 443 teilen, auch wenn dieser nur eine IP-Adresse besitzt. Beim Aufbau einer TLS-Verbindung fordert der Client, der die Verbindung aufgebaut hat, vom Server ein digitales Zertifikat an, welches für die Verschlüsselung der Verbindung benötigt wird. Der Server sendet standardmäßig das mit seiner IP-Adresse verbundene Zertifikat zurück. Um unter einer IP-Adresse aber einen Server für verschiedene Hosts mit verschiedenen Zertifikaten zu betreiben, ist es erforderlich, dass der Client dem Server den gewünschten Host vor der Übermittlung des Zertifikats, also bevor über die Verbindung ein verschlüsselter Kanal aufgebaut wurde, mitteilt. SNI ist eine Erweiterung von TLS, die es dem Client erlaubt, diese Information unverschlüsselt zu übertragen.

Hintergrund[Bearbeiten | Quelltext bearbeiten]

Um als Nutzer die Authentizität einer Webseite im Internet zu überprüfen, verwendet man in der Regel digitale Zertifikate. Da der verschlüsselte Verbindungsaufbau zum Server bereits stattfindet, bevor die angefragte URL übertragen wird, ist es mit TLS-1.0/SSL-Verschlüsselung nicht möglich, mehrere Domains unter einer IP-Adresse zu nutzen (sogenanntes Virtual Hosting). Grund für diese Einschränkung ist, dass der Server bei mehreren Zertifikaten nicht weiß, welches Zertifikat, das meist nur für eine Domain gilt, er benutzen müsste. Zum Zeitpunkt der Spezifikation von SSL/TLS wurde die Möglichkeit von Virtual Hosting nicht vorgesehen.

Verfahren[Bearbeiten | Quelltext bearbeiten]

Im erweiterten SNI-Verfahren wird der Domainname vom Browser in dem sogenannten server_name-Parameter bereits beim Verbindungsaufbau dem Server mit übergeben, sodass der Server das passende Zertifikat auswählen und beim TLS-Handshake verwenden kann.

Die 2003 definierte Erweiterung (RFC 3546 3.1) ermöglicht es so, die begrenzte Anzahl von IPv4-Adressen besser auszunutzen. Im April 2006 wurde der RFC durch RFC 4366 ersetzt, im Januar 2011 durch RFC 6066.

Sogenannte „Wildcard-Zertifikate“ mit einem Kanonischen Namen wie hier *.wikipedia.org umfassen beliebige Namen in einer Domain. Ein Zertifikat kann auch alternative Namen umfassen.[1] Zertifikatsanbieter verlangen für solche Zertifikate allerdings höhere Gebühren.

Sicherheit[Bearbeiten | Quelltext bearbeiten]

Der server_name-Parameter wird unverschlüsselt übertragen und ist somit von einem Dritten, der die Verbindung belauschen kann, leicht auszuspähen. Dies verrät unter Umständen mehr Informationen als SSL/TLS ohne SNI, da das anschließend übertragene Server-Zertifikat ebenfalls die Domain(s), für die es ausgestellt wurde, im Klartext enthält. Wenn das Zertifikat für mehrere Domains gültig oder ein Wildcard-Zertifikat ist, würde der Ausspähende ohne SNI nicht den kompletten angeforderten Hostnamen erfahren.

Unabhängig von SSL/TLS und dem HTTP-Protokoll können Dritte auch die abgefragte Domain in Erfahrung bringen, da zum Verbindungsaufbau die Domain mittels DNS bzw. DNSSEC aufgelöst werden muss. Der vollständige Domainname (also inklusive Subdomain) wird dabei immer unverschlüsselt übertragen.

Bei vielen, vor allem größeren, Websites ist zudem eine Rückführung über die aufgerufene IP-Adresse möglich, da diese systembedingt nicht verschlüsselt werden kann. Bei mittelgroßen Websites ist dieses aber zumindest nicht für Subdomains möglich, sofern diese auf demselben Server liegen.

Unterstützte Software[Bearbeiten | Quelltext bearbeiten]

Software Typ Unterstützt Bemerkungen Unterstützt seit
Firefox Web Browser Ja Seit Version 2.0[2] 2006
Chrome Web Browser Ja Seit 6.0[2][3] 2010
Internet Explorer Web Browser Ja Seit Version 7 ab Windows Vista[2] 2006
Opera Web Browser Ja Seit Version 8.0[2]
Safari Web Browser Ja Seit Version 3.2.1 ab Mac_OS_X_Leopard 10.5.6 oder Windows Vista[2]
ELinks Web Browser Nein Nicht bis Version 0.12pre6
Android Browser Mobile Browser Ja Honeycomb (3.x) für Tablets und Ice Cream Sandwich (4.x) für Smartphones[4] 2011
Mozilla Firefox Mobile Mobile browser Teilweise Firefox Sync unterstützt kein SNI[5]
BlackBerry OS Mobile Browser Ja Seit Version 10 2013
Windows Phone Mobile Browser Ja Seit Version 7[6]
Nokia Browser for Symbian Mobile Browser Nein
Safari auf iOS Mobile Browser Ja Seit iOS 4[7]
(Mini & MobilOperae) Mobile Browser Ja Seit Version 10.1 auf Android
IBM HTTP Server Web Server Ja[8][9] Seit Version 9.0.0
Apache Tomcat Web Server Ja Seit Version 8.5
Apache HTTP Server Web Server Ja Seit Version 2.2.12 2009
Microsoft IIS Web Server Ja Seit Version 8 2012
Lighttpd Web Server Ja Seit Version 1.4.24[10], oder mit SNI-Patch[11]
Nginx Web Server Ja Seit Version 0.5.23 2007
Jetty Web Server Ja Seit Version 9.3.0 2015
Hiawatha Web Server Ja Seit Version 8.6[12]
cURL Kommandozeilen Tool und Bibliothek Ja Seit Version 7.18.1 2008
wget Kommandozeilen Tool Ja Seit Version 1.14 2012
Qt Bibliothek Ja Seit Version 4.8 2011
Mozilla NSS server side Bibliothek Nein[13]
4th Dimension Bibliothek Nein Nicht bis Version 15.2
Java Bibliothek Ja Seit Version 1.7 2011
ColdFusion / Lucee Bibliothek Ja ColdFusion seit Version 10 Update 18, 11 Update 7, Lucee seit Version 4.5.1.019, Version 5.0.0.50 2015
Erlang Library Ja Seit Version r17 2013
Go Bibliothek Ja Seit Version 1.4 2011
Perl Bibliothek Ja Seit Net::SSLeay Version 1.50 und IO::Socket::SSL Version 1.56 2012
PHP Bibliothek Ja Seit Version 5.3 2014
Python Bibliothek Ja Seit Version 2.7.9rc1 (2.x) und 3.2alpha4 (3.x) (in ssl, urllib[2] und httplib) 2011 (3.x), 2014 (2.x)
Ruby Bibliothek Ja Seit Version 2.0 (in net/http) 2011

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Does Domino HTTP allow SSL certificates with SubjectAltName? IBM; abgerufen am 2. Oktober 2016.
  2. a b c d e Server Name Indication(SNI). IBM; abgerufen am 2. Oktober 2016.
  3. IIS 8 and IIS 8.5 SNI Browser Support. DigiCert. Abgerufen am 31. Dezember 2015.
  4. http://code.google.com/p/android/issues/detail?id=12908#c15
  5. https://bugzilla.mozilla.org/show_bug.cgi?id=765064
  6. http://blogs.msdn.com/b/kaushal/archive/2012/09/04/server-name-indication-sni-in-iis-8-windows-server-2012.aspx
  7. http://langui.sh/2010/06/08/sni-in-ios-4-0/
  8. IBM HTTP Server SSL Questions and Answers. Publib.boulder.ibm.com. Abgerufen am 8. März 2011.
  9. IHS 8 powered by Apache 2.2.x ?. Publib.boulder.ibm.com. Abgerufen am 8. März 2011.
  10. http://www.lighttpd.net/2009/10/25/1-4-24-now-with-tls-sni-and-money-back-guarantee
  11. #386 (TLS servername extension (SNI) for namebased TLS-vhosts)
  12. https://www.hiawatha-webserver.org/changelog
  13. Implement TLS Server Name Indication for servers. Bugzilla@Mozilla. 11. November 2006. Abgerufen am 30. Oktober 2012.