SNI (Server Name Indication) ist eine Ergänzung zum TLS-Verschlüsselungsprotokoll, mit der ein Clientgerät im ersten Schritt des TLS-Handshakes spezifizieren kann, welchen Domainnamen es erreichen möchte. Auf diese Weise werden häufige Fehler vermieden, die auftreten, wenn Namen nicht übereinstimmen.
Nach Lektüre dieses Artikels können Sie Folgendes:
Ähnliche Inhalte
Abonnieren Sie theNET, Cloudflares monatliche Zusammenfassung der beliebtesten Einblicke in das Internet!
Link zum Artikel kopieren
SNI ist in etwa so, als würden Sie einen Blumenstrauß an eine bestimmte Mitarbeiterin in einer großen Firma verschicken. Bei einem allgemeinen Geschenk an die Firma reichen der Name der Firma und ihre Adresse vollkommen aus. Wenn der Blumenstrauß aber eine bestimmte Person erreichen soll, müssen Sie auch den Namen der Empfängerin und ihre Abteilung angeben. Andernfalls landet Ihr Blumenstrauß möglicherweise auf dem falschen Schreibtisch oder kommt gar nicht erst an.
Viele Webserver sind eher wie große Firmen: Sie hosten mehrere Domainnamen, sodass die IP-Adresse allein nicht ausreicht, um anzugeben, welche Domain ein Benutzer erreichen möchte. Dieser Umstand kann dazu führen, dass der Server das falsche SSL-Zertifikat anzeigt, wodurch eine HTTPS-Verbindung verhindert oder beendet wird – genau wie Ihr Blumenstrauß nicht ankommt, wenn der richtige Empfänger nicht für den Empfang der Sendung unterschreiben kann.
Wenn mehrere Websites auf einem Server gehostet werden, eine einzige IP-Adresse gemeinsam nutzen und jede Website über ein eigenes SSL-Zertifikat verfügt, weiß der Server möglicherweise nicht, welches SSL-Zertifikat angezeigt werden soll, wenn ein Clientgerät versucht, eine sichere Verbindung zu einer der Websites herzustellen. Dies liegt daran, dass der SSL/TLS-Handshake erfolgt, bevor das Clientgerät über HTTP angibt, zu welcher Website es eine Verbindung herstellen will.
Um dieses Problem zu lösen, wurde Server Name Indication (SNI) entwickelt. SNI ist eine Erweiterung für das in HTTP verwendete TLS-Protokoll (früher als SSL-Protokoll bekannt). Es ist im TLS/SSL-Handshake-Prozess enthalten, um sicherzustellen, dass Clientgeräte das richtige SSL-Zertifikat für die Website sehen können, die sie erreichen möchten. Mit dieser Erweiterung lässt sich der Hostname oder Domainname der Website während des TLS-Handshakes angeben, anstatt erst wenn die HTTP-Verbindung nach dem Handshake geöffnet wird.
Einfacher ausgedrückt: SNI ermöglicht es einem Benutzergerät, eine sichere Verbindung mit https://www.example.com herzustellen, selbst wenn diese Website am selben Ort (dieselbe IP-Adresse) gehostet wird wie https://www.something.com, https://www.another-website.com, and https://www.example.io.
SNI verhindert einen so genannten „Common Name Mismatch Error“: Wenn ein Client-(Benutzer-)Gerät zwar die richtige IP-Adresse für eine Website erreicht, der Name auf dem SSL-Zertifikat jedoch nicht mit dem Namen der Website übereinstimmt. Oft führt diese Art von Fehler zu einer „Ihre Verbindung ist nicht privat“-Fehlermeldung im Browser des Benutzers.
SNI wurde 2003 als Erweiterung zu TLS/SSL hinzugefügt und war ursprünglich nicht Teil des Protokolls. Fast alle Browser, Betriebssysteme und Webserver unterstützen SNI, mit Ausnahme einiger der ältesten Browser und Betriebssysteme, die immer noch verwendet werden.
Obwohl SNI für Server Name Indication steht, „zeigt“ SNI tatsächlich den Hostnamen einer Website oder Domain an, die vom Namen des Webservers, der die Domain tatsächlich hostet, getrennt sein können. In der Tat werden häufig mehrere Domains auf einem Server gehostet. In diesem Fall werden sie als virtuelle Hostnamen bezeichnet.
Ein Servername ist einfach der Name eines Computers. Bei Webservern ist dieser Name für Endbenutzer normalerweise nicht sichtbar, es sei denn, der Server hostet nur eine Domain und der Servername entspricht dem Domainnamen.
Oft übernimmt ein Webserver die Verantwortung für mehrere Hostnamen – oder Domainnamen (die für Menschen lesbaren Namen von Websites). Jeder Hostname verfügt über ein eigenes SSL-Zertifikat, wenn die Websites HTTPS verwenden.
Das Problem ist, dass diese Hostnamen auf einem Server alle dieselbe IP-Adresse haben. Über HTTP ist es kein Problem, da der Client beim Öffnen einer TCP-Verbindung in einer HTTP-Anfrage angibt, welche Website er erreichen möchte.
In HTTPS findet jedoch zuerst ein TLS-Handshake statt, bevor die HTTP-Konversation beginnen kann (HTTPS verwendet weiterhin HTTP – es verschlüsselt nur die HTTP-Nachrichten). Ohne SNI kann der Client dem Server also nicht angeben, mit welchem Hostnamen er spricht. Infolgedessen kann der Server möglicherweise ein SSL-Zertifikat für den falschen Hostnamen erstellen. Wenn der Name auf dem SSL-Zertifikat nicht mit dem Namen übereinstimmt, den der Client erreichen möchte, gibt der Client-Browser eine Fehlermeldung zurück und beendet in der Regel die Verbindung.
SNI fügt den Domainnamen zum TLS-Handshake-Prozess hinzu, sodass der TLS-Prozess den richtigen Domainnamen erreicht und das richtige SSL-Zertifikat erhält und der Rest des TLS-Handshakes wie gewohnt fortgesetzt werden kann.
Genauer gesagt enthält SNI den Hostnamen in der Client-Hello-Nachricht oder den allerersten Schritt eines TLS-Handshakes.
Ein Hostname ist der Name eines Geräts, das eine Verbindung zu einem Netzwerk herstellt. Im Internetkontext ist ein Domainname oder der Name einer Website eine Art Hostname. Beide sind getrennt von der IP-Adresse, die dem Domainnamen zugeordnet ist.
Ein virtueller Hostname ist ein Hostname, der keine eigene IP-Adresse hat und zusammen mit anderen Hostnamen auf einem Server gehostet wird. Er ist „virtuell“, weil er keinen dedizierten physischen Server besitzt, so wie auch die virtuelle Realität nur digital existiert, nicht aber in der physischen Welt.
Encrypted SNI (ESNI) ergänzt die SNI-Erweiterung, indem der SNI-Teil des Client Hello verschlüsselt wird.Auf diese Weise wird verhindert, dass jemand, der zwischen dem Client und dem Server herumschnüffelt, sehen kann, welches Zertifikat der Client anfordert, was den Schutz und die Sicherheit des Clients erhöht.Cloudflare und Mozilla Firefox unterstützen ESNI seit 2018.
In diesem seltenen Fall kann der Benutzer bestimmte Websites wahrscheinlich nicht erreichen, und der Browser des Benutzers gibt eine Fehlermeldung zurück wie beispielsweise: „Ihre Verbindung ist nicht privat.“
Die überwiegende Mehrheit der Browser und Betriebssysteme unterstützt SNI. Nur sehr alte Versionen des Internet Explorers, des BlackBerry-Betriebssystems und andere veraltete Softwareversionen unterstützen SNI nicht.
Weitere Informationen zum TLS/SSL-Protokoll, zum SSL-Zertifikat und zur Funktionsweise von HTTPS finden Sie unter Was ist ein SSL-Zertifikat? oder fordern Sie ein kostenloses SSL-Zertifikat von Cloudflare an.