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 gemeinsamen Server auf dem TLS-Port 443 teilen, auch wenn dieser nur eine IP-Adresse besitzt (Virtual Hosting).

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 mitteilt, also bevor über die Verbindung ein verschlüsselter Kanal aufgebaut wurde. SNI ist eine Erweiterung von TLS, die es dem Client erlaubt, diese Information unverschlüsselt zu übertragen.

Hintergrund 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 jedoch bereits stattfindet, bevor die angefragte URL übertragen wird, ist Virtual Hosting mit TLS-1.0/SSL-Verschlüsselung nicht möglich.

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 Im erweiterten SNI-Verfahren wird der Domainname vom Browser im server_name-Parameter bereits beim Verbindungsaufbau dem Server mit übergeben, sodass dieser das passende Zertifikat auswählen und beim TLS-Handshake verwenden kann.

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

Sicherheit 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. Mit Encrypted SNI (ESNI) und seinem Nachfolger Encrypted Client Hello (ECH) gibt es Ansätze, dieses Problem zu lösen.

Unabhängig von SSL/TLS und HTTP 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 meistens unverschlüsselt übertragen. Mit DNS over TLS oder DNS over HTTPS gibt es Ansätze, dieses Problem zu lösen.

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. Darüber hinaus kann dieses Problem durch die Verwendung eines VPN abgemildert werden.

Unterstützte Software

Software Typ Unterstützt Bemerkungen Unterstützt seit Firefox Web Browser Ab Version 2.0 2006 Chrome Web Browser Seit 6.0 2010 Internet Explorer Web Browser Ab Version 7 ab Windows Vista 2006 Microsoft Edge Web Browser 2015 Opera Web Browser Ab Version 8.0 2005 Safari Web Browser Ab Version 3.2.1 ab Mac OS X Leopard 10.5.6 oder Windows Vista 2008 ELinks Web Browser Nicht bis Version 0.12pre6 Android Browser Mobile Browser Honeycomb (3.x) für Tablets und Ice Cream Sandwich (4.x) für Smartphonescode.google.com 2011 Mozilla Firefox Mobile Mobile browser Firefox Sync unterstützt kein SNIbugzilla.mozilla.org Blackberry OS Mobile Browser Ab Version 10 2013 Windows Phone Mobile Browser Ab Version 7blogs.msdn.com 2010 Nokia Browser for Symbian Mobile Browser Safari auf iOS Mobile Browser Seit iOS 4langui.sh 2010 (Mini & MobilOperae) Mobile Browser Ab Version 10.1 auf Android 2010 IBM HTTP Server Web Server Ab Version 9.0.0 2016 Apache Tomcat Web Server Ab Version 8.5 2016 Apache HTTP Server Web Server Ab Version 2.2.12 2009 Microsoft IIS Web Server Ab Version 8 2012 Lighttpd Web Server Ab Version 1.4.24,lighttpd.net oder mit SNI-Patch#386 (TLS servername extension (SNI) for namebased TLS-vhosts) 2009 Nginx Web Server Ab Version 0.5.23 2007 Jetty Web Server Ab Version 9.3.0 2015 HCL Domino Web Server Ab Version 11.0.1 2020 Hiawatha Web Server Ab Version 8.6hiawatha-webserver.org 2012 cURL Kommandozeilen Tool und Bibliothek Ab Version 7.18.1 2008 wget Kommandozeilen Tool Ab Version 1.14 2012 Qt Bibliothek Ab Version 4.8 2011 Mozilla NSS server side Bibliothek 4th Dimension Bibliothek Nicht bis Version 15.2 Java Bibliothek Ab Version 1.8 2014 ColdFusion / Lucee Bibliothek ColdFusion ab Version 10 Update 18, 11 Update 7, Lucee ab Version 4.5.1.019, Version 5.0.0.50 2015 Erlang Bibliothek Ab Version r17 2013 Go Bibliothek Ab Version 1.4 2011 Perl Bibliothek Seit Net::SSLeay Version 1.50 und IO::Socket::SSL Version 1.56 2012 PHP Bibliothek Ab Version 5.3 2014 Python Bibliothek Ab Version 2.7.9rc1 (2.x) und 3.2alpha4 (3.x) (in ssl, urllib und httplib) 2011 (3.x), 2014 (2.x) Ruby Bibliothek Ab Version 2.0 (in net/http) 2011 OpenBSD httpd Web Server Seit OpenBSD Version 6.1 11.04.2017

Normen und Standards Anfänglich war Server Name Indication (SNI) eine optionale Protokollerweiterung ab TLS 1.0 von 1999 und in folgenden Request for Comments (RFC) standardisiert:

Seit TLS 1.3 (RFC 8446 von 2018) gehört SNI zum Grundfunktionsumfang von TLS, wobei dieser RFC zur Detailspezifikation von SNI auf RFC 6066 verweist.

Weblinks Browsertest für SNI. badssl.com

Einzelnachweise

Kategorie:Netzwerkprotokoll auf Anwendungsschicht Kategorie:Kryptologischer Standard Kategorie:Transport Layer Security