Server Name Indication

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

Server Name Indication (SNI) ist eine Erweiterung des Transport Layer Security-Standards (TLS), die es ermöglicht, dass sich mehrere Websites unterschiedlicher Domains einen Server 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. Der Server sendet das mit der IP-Adresse verbundene Zertifikat zurück. Um Server für verschiedene Hosts mit verschiedenen Zertifikaten unter einer IP-Adresse zu betreiben, ist es erforderlich, dass der Client dem Server den gewünschten Host vor der Übermittlung des Zertifikats mitteilt. SNI ist eine Erweiterung von TLS, die es dem Client erlaubt, diese Information zu übertragen.

Das Verfahren[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 immer 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.

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“ können komplette Subdomain-Namensräume abdecken (z. B. *.meine-domain.de). Die meisten Zertifikatsanbieter verlangen für Wildcard-Zertifikate allerdings höhere Gebühren als für herkömmliche Zertifikate.

Sicherheit[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 zwar ebenfalls die Domain(s), für die es ausgestellt wurde, im Klartext enthält. Falls das Zertifikat jedoch für mehrere Domains gültig oder ein Wildcard-Zertifikat ist, erfährt der Ausspähende ohne SNI jedoch nicht den kompletten angeforderten Hostname.

Beispiel

server_name=shop.example.com wohingegen das SSL-Zertifikat für *.example.com gilt. Ohne SNI wüsste ein Dritter also, dass die Site von example.com besucht wird, jedoch nicht, ob der Besucher den Shop, das Forum usw. besucht hat.

Unterstützte Software[Bearbeiten]

Browser[Bearbeiten]

SNI wird von folgenden Browsern unterstützt:

Browser auf mobilen Systemen[Bearbeiten]

SNI wird von folgenden Browsern auf den angegebenen mobilen Betriebssystemen unterstützt:

Server[Bearbeiten]

Quellen[Bearbeiten]

  1. http://code.google.com/p/android/issues/detail?id=12908#c15
  2. http://langui.sh/2010/06/08/sni-in-ios-4-0/
  3. http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
  4. http://wap.ecw.de/archives/1218
  5. http://www.lighttpd.net/2009/10/25/1-4-24-now-with-tls-sni-and-money-back-guarantee
  6. #386 (TLS servername extension (SNI) for namebased TLS-vhosts)
  7. https://www.hiawatha-webserver.org/changelog

Weblinks[Bearbeiten]