Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Server Name Indication

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 …

Inhalt6 Abschnitte
  1. 1. Kernidee und Bedeutung
  2. 2. Hintergrund
  3. 3. Verfahren und Zertifikate
  4. 4. Sicherheits- und Datenschutzaspekte
  5. 5. Unterstützte Software
  6. 6. Normen und Standards

Kernidee und Bedeutung

Server Name Indication (SNI) ist eine Erweiterung von Transport Layer Security (TLS). Sie ermöglicht, dass mehrere verschlüsselt erreichbare Websites verschiedener Domains denselben Server und dieselbe IP-Adresse am TLS-Port 443 nutzen. Dieses Verfahren heißt Virtual Hosting.

Beim Aufbau einer TLS-Verbindung fordert der Client vom Server ein digitales Zertifikat an. Das Zertifikat wird für die Verschlüsselung und zur Prüfung der Authentizität der Website benötigt. Ohne SNI würde der Server standardmäßig das Zertifikat zurücksenden, das mit seiner IP-Adresse verbunden ist. Bei mehreren Websites mit unterschiedlichen Zertifikaten wüsste er daher nicht, welches Zertifikat verwendet werden soll.

SNI löst dieses Problem, indem der Client den gewünschten Hostnamen bereits beim Verbindungsaufbau im Parameter server_name mitteilt. Der Server kann dadurch das passende Zertifikat auswählen und im TLS-Handshake verwenden.

Hintergrund

Nutzer überprüfen die Authentizität einer Website in der Regel mithilfe digitaler Zertifikate. Bei TLS-1.0 beziehungsweise SSL wird der verschlüsselte Verbindungsaufbau jedoch bereits gestartet, bevor die angeforderte URL übertragen wird. Deshalb war Virtual Hosting mit mehreren Zertifikaten zunächst nicht möglich.

Die ursprüngliche Spezifikation von SSL/TLS sah die Möglichkeit, mehrere Hosts mit verschiedenen Zertifikaten unter einer IP-Adresse zu betreiben, nicht vor. Das zentrale Problem bestand darin, dass der Server vor der Zertifikatsübermittlung den gewünschten Host nicht kannte.

Verfahren und Zertifikate

Im erweiterten SNI-Verfahren übermittelt der Browser den Domainnamen beim Aufbau der Verbindung im server_name-Parameter. Diese Information wird vor dem Aufbau des verschlüsselten Kanals übertragen. Der Server nutzt sie, um das passende Zertifikat für den TLS-Handshake auszuwählen.

Für mehrere Namen gibt es verschiedene Zertifikatsarten:

  • Ein Wildcard-Zertifikat mit einem kanonischen Namen wie *.wikipedia.org umfasst beliebige Namen innerhalb einer Domain.
  • Ein Zertifikat kann auch alternative Namen für mehrere Domains enthalten.

Für Wildcard-Zertifikate und Zertifikate mit alternativen Namen verlangen Zertifikatsanbieter allerdings höhere Gebühren.

Sicherheits- und Datenschutzaspekte

Der server_name-Parameter wird unverschlüsselt übertragen. Ein Dritter, der die Verbindung belauscht, kann den angeforderten Hostnamen daher leicht ausspähen. SNI kann dadurch mehr Informationen offenlegen als SSL/TLS ohne SNI: Das anschließend übertragene Server-Zertifikat enthält zwar ebenfalls die Domain oder Domains, für die es ausgestellt wurde, aber bei einem Zertifikat für mehrere Domains oder einem Wildcard-Zertifikat lässt sich ohne SNI möglicherweise nicht der vollständige angeforderte Hostname erkennen.

Encrypted SNI (ESNI) und sein Nachfolger Encrypted Client Hello (ECH) sind Ansätze, dieses Problem zu lösen. Unabhängig von SSL/TLS und HTTP können Dritte die abgefragte Domain außerdem über die DNS- beziehungsweise DNSSEC-Auflösung erfahren. Der vollständige Domainname einschließlich Subdomain wird dabei meistens unverschlüsselt übertragen. DNS over TLS und DNS over HTTPS sollen dieses Problem verringern.

Bei vielen, insbesondere größeren Websites ist eine Zuordnung auch über die aufgerufene IP-Adresse möglich, da diese systembedingt nicht verschlüsselt werden kann. Bei mittelgroßen Websites ist eine solche Zuordnung zumindest für Subdomains nicht möglich, wenn diese auf demselben Server liegen. Die Nutzung eines VPN kann das Problem abmildern.

Unterstützte Software

SNI wird von den meisten verbreiteten Browsern, Webservern und Programmbibliotheken unterstützt. Bei Browsern gilt unter anderem: Firefox unterstützt SNI ab Version 2.0 (2006), Chrome ab 6.0 (2010), Internet Explorer ab Version 7 unter Windows Vista (2006), Microsoft Edge seit 2015, Opera ab Version 8.0 (2005), Safari ab Version 3.2.1 unter Mac OS X Leopard 10.5.6 oder Windows Vista (2008), Android Browser ab Honeycomb 3.x für Tablets und Ice Cream Sandwich 4.x für Smartphones (2011), Blackberry OS ab Version 10 (2013), Windows Phone ab Version 7 (2010) und Safari auf iOS seit iOS 4 (2010). Firefox Mobile unterstützt SNI teilweise, da Firefox Sync kein SNI unterstützt. Nokia Browser for Symbian und ELinks unterstützen es nicht; ELinks nicht bis Version 0.12pre6. Mini & MobilOperae unterstützen SNI ab Version 10.1 auf Android (2010).

Unter den Webservern unterstützen IBM HTTP Server SNI ab Version 9.0.0 (2016), Apache Tomcat ab 8.5 (2016), Apache HTTP Server ab 2.2.12 (2009), Microsoft IIS ab Version 8 (2012), Lighttpd ab Version 1.4.24 oder mit SNI-Patch (2009), Nginx ab Version 0.5.23 (2007), Jetty ab Version 9.3.0 (2015), HCL Domino ab Version 11.0.1 (2020), Hiawatha ab Version 8.6 (2012) und OpenBSD httpd seit OpenBSD Version 6.1 (11.04.2017).

Unterstützt wird SNI außerdem von cURL ab Version 7.18.1 (2008), wget ab 1.14 (2012), Qt ab 4.8 (2011), Java ab 1.8 (2014), ColdFusion ab Version 10 Update 18 beziehungsweise 11 Update 7, Lucee ab Version 4.5.1.019 beziehungsweise 5.0.0.50 (2015), Erlang ab r17 (2013), Go ab 1.4 (2011), Perl seit Net::SSLeay 1.50 und IO::Socket::SSL 1.56 (2012), PHP ab 5.3 (2014), Python ab 2.7.9rc1 und 3.2alpha4 (2011 für 3.x, 2014 für 2.x) sowie Ruby ab 2.0 in net/http (2011). Mozilla NSS server side und 4th Dimension unterstützen SNI nicht; 4th Dimension nicht bis Version 15.2.

Normen und Standards

SNI war zunächst eine optionale Protokollerweiterung ab TLS 1.0 von 1999. Die Erweiterung wurde zuerst in RFC 3546, Transport Layer Security (TLS) Extensions, aus dem Jahr 2003, Abschnitt 3.1, standardisiert. Dieser RFC ist veraltet.

Die maßgebliche Spezifikation ist RFC 6066, Transport Layer Security (TLS) Extensions: Extension Definitions, aus dem Jahr 2011, Abschnitt 3: Server Name Indication. Seit TLS 1.3 gehört SNI zum Grundfunktionsumfang von TLS. RFC 8446 aus dem Jahr 2018 verweist für die Detailspezifikation von SNI auf RFC 6066.

Weiterlesen

Transport Layer Security Während des TLS Handshake finden ein sicherer Schlüsselaustausch und eine zertifikatsbasierte Authentifizierung statt. Für die verschlüsselte und geschützte … Domain (Internet) Eine Domain (von englisch domain [də(ʊ)ˈmeɪn] ‚Bereich', auch als Domäne bezeichnet) ist ein zusammenhängender Teilbereich des hierarchischen Domain Name … Hostrechner Nachdem in den 1980er Jahren Rechnernetze den Alltag eroberten, wurde der Ausdruck auch für in ein Rechnernetz eingebundene Rechner verwendet, die … Port (Netzwerkadresse) Zusammen mit der IP-Adresse ermöglicht der Port die Adressierung eines Servers oder Clients. Durch Angabe von Quell- und Zieladresse, jeweils bestehend aus IP … IP-Adresse Im Falle von Ethernet-Netzen dient das ARP (Address Resolution Protocol) zum Auffinden der Hardwareadresse. ARP arbeitet auf der zweiten Schicht des OSI … Client Man nennt auch ein Endgerät selbst, das Dienste von einem Server abruft, Client. Das Gegenstück zum Client ist das jeweilige Serverprogramm bzw. der Server … Digitales Zertifikat Ein digitales Zertifikat (auch Sicherheitszertifikat) ist eine Datenstruktur, die die Zuordnung eines öffentlichen Schlüssels zu einer Identität oder … Uniform Resource Locator Ein Uniform Resource Locator (Abk. URL; englisch für „einheitlicher Verorter für Ressourcen“) identifiziert und lokalisiert eine Ressource, … Internet Mit Social-Media-Plattformen wie Facebook, Twitter oder YouTube trat das bidirektionale Austauschen von Inhalten unter den Nutzern (sogenanntem user … Domain Name System Das Domain Name System, deutsch Domain-Namen-System, (DNS) ist ein hierarchisch unterteiltes Bezeichnungssystem in einem meist IP-basierten Netz zur … Virtual Private Network Virtual Private Network (deutsch „virtuelles privates Netzwerk“; kurz: VPN) bezeichnet eine Netzwerkverbindung, die von Unbeteiligten nicht einsehbar ist, … Java-Technologie Programme für die Java-Plattform werden in der Regel mit Hilfe der Programmiersprache Java erstellt. Die Verwendung anderer Programmiersprachen ist möglich, z.