Server Name Indication (SNI): Was steckt hinter dem Standard?

Sicherheit spielt im Internet eine sehr große Rolle. Deshalb versuchen Standards, Zertifikate und Protokolle sowohl die Nutzer als auch Server vor schädlichen Angriffen zu schützen. Eines dieser Protokolle nennt sich Transport Layer Security (TLS). Da dieses aber Probleme mit sich bringt, wurde mit der Server Name Indication (SNI) eine Erweiterung geschaffen.

Wofür wird Server Name Indication gebraucht?

Bevor man verstehen kann, warum SNI entwickelt wurde, muss man nachvollziehen, wie TLS funktioniert. Bei dem Nachfolger vom Secure Sockets Layer (SSL) findet ein sogenannter TLS-Handshake statt. Dabei tauschen Client und Server – in der Praxis also meist der Webbrowser und die Website – Informationen aus, noch bevor die eigentliche Datenübertragung beginnt. Bei diesem virtuellen Handschlag identifiziert sich der Server gegenüber dem Client und sendet auch das entsprechende Sicherheitszertifikat. Erst wenn der Client dieses verifiziert hat, nehmen beide Kommunikationspartner eine Verbindung auf und tauschen Daten aus. Fällt die Verifikation negativ aus, findet keine weitere Datenübertragung statt.

Was passiert aber, wenn mehrere Websites über eine IP-Adresse laufen, wie beim Virtual Hosting? Da sich IPv6 noch immer nicht durchgesetzt hat, arbeiten wir in einem sehr begrenzten IP-Adressrahmen, und nicht jede Domain kann eine eigene IP-Adresse für sich beanspruchen. An wen richtet der Client sein „Hello“ (der erste Schritt eines TLS-Handshakes) dann? Die Wahrscheinlichkeit, dass die falsche Website reagiert, nicht das korrekte Zertifikat – mit dem richtigen Hostnamen – sendet und die Verbindung damit nicht zustande kommt, ist groß. Deshalb ist es notwendig, dass der Client dem Server mitteilt, zu welcher Domain (Host) er eine Verbindung aufnehmen möchte. Dafür hat man die Server Name Indication eingeführt.

Fakt

Sollte es zu einer Diskrepanz beim Abgleich des Zertifikats kommen (der Name der angeforderten Website stimmt nicht mit dem Namen auf dem Zertifikat überein), bricht der Client die Übertragung ab. Grund dafür ist, dass eine solche Ungereimtheit ein großes Sicherheitsrisiko in Form einer Man-in-the-Middle-Attacke.

Wie funktioniert SNI?

Wenn bei einer ungesicherten Verbindung der Fall auftritt, dass mehrere Websites über eine IP-Adresse laufen, hat man das Problem prinzipiell nicht. In

HTTP

ist es vorgesehen, dass der Hostname beim Anfordern einer Website in einem Header angegeben ist. Bei TLS muss aber der Handshake geschehen, bevor der Webbrowser diese Angabe überhaupt versenden kann. Die Server Name Indication sorgt dafür, dass der Hostname bereits vor dem Zertifikatsaustausch zwischen Server und Client übermittelt wird.

SNI ist eine Erweiterung zu TLS. Das Verschlüsselungsprotokoll ist Teil des TCP/IP-Protokollstapels. Als solcher erweitert TLS das Transmission Control Protocol (TCP) um eine Verschlüsselung. Durch die zusätzliche Schicht wird außerdem aus HTTP HTTPS. Hat man TLS durch die Server Name Indication erweitert, stellt das Sicherheitsprotokoll beim Handshake ein weiteres Feld zur Verfügung: Unter dem Feld ClientHelloExtension findet man das optionale Feld ServerName. In dieses Feld trägt der Client (und das übernimmt der Webbrowser automatisch) den Namen des Hosts ein, den er ansprechen möchte. So ist gesichert, dass der richtige Host antwortet.

Server Name Indication im Browser

Als gewöhnlicher Internetnutzer sollte man von den Vorgängen rund um SNI gar nichts mitbekommen. In den meisten Fällen müssen Nutzer dafür nichts installieren oder einstellen. Es reicht vollkommen, wenn Sie ein aktuelles Betriebssystem und einen modernen Browser verwenden. Firefox, Chrome, Edge, Opera und Safari unterstützen die Erweiterung standardmäßig. Einzig Nutzern, die noch Windows XP (oder sogar ältere Windows-Versionen) nutzen und darin den Internet Explorer verwenden, steht Server Name Indication nicht zur Verfügung. Sollte man sich immer noch auf dem inzwischen nicht mehr mit Updates unterstützen Betriebssystem bewegen, hat man jedoch die Möglichkeit, einen anderen Browser einzusetzen, der SNI unterstützt. Auch die meisten mobilen Browser verwenden SNI.

Server: IIS, Nginx & Apache mit SNI

Anders sieht es aus, wenn Sie selbst Betreiber eines Webservers sind, denn dann müssen Sie u. U. tätig werden – abhängig davon, welchen Webserver Sie verwenden: Seit IIS 8 hat Microsoft standardmäßig eine Option für die Server Name Indication in seiner Software integriert. Beim Apache-HTTP-Server sieht es etwas anders aus: Hier ist es möglich, mittels OpenSSL (bzw. mod_ssl) SNI einzubinden. Grundsätzlich müssen Sie das Modul nur mit TLS-Erweiterungen laufen lassen (ist ab Version 0.9.8k ohnehin voreingestellt). Eine genaue Anleitung zum Einrichten von SNI unter Apache erhalten Sie in der Apache-HTTP-Server-Wiki.

Auch unter Nginx kommt ein SNI-Support seit Version 0.5.23 von Haus aus mit und funktioniert prinzipiell wie bei Apache. Ob Ihre Version Server Name Indication unterstützt, können Sie mit dem Eingabebefehl nginx -V überprüfen. Ist dies erfüllt, geben Sie als Webmaster jedem Virtual Host einen eigenen Namen und weisen jeweils das korrekte Zertifikat zu. Mehr Informationen finden Sie in der offiziellen Nginx-Dokumentation.

Tipp

Sollte Ihre Website noch keine Verschlüsselung anbieten, erfahren Sie in unserem Ratgeber, wie Sie Ihre Website auf HTTPS umstellen.

Was sind die Nachteile von SNI?

Server Name Indication hat nicht nur Vorteile. Zum einen wird SNI nicht von allen Webbrowsern unterstützt – dies betrifft allerdings nur eine zugegebenermaßen geringe Zahl von Nutzern. Dass es sich bei SNI aber nicht um ein perfektes Modell handelt, sondern nur um eine Übergangslösung, erkennt man daran, dass Informationen unverschlüsselt übermittelt werden. Es ist zwar nur der Hostname, aber auch diese Information sollte bei einer gründlichen Verschlüsselung nicht von Dritten abgegriffen werden können. Mehr Sicherheit ist also gegeben, wenn man kein SNI einsetzen muss und jede Website ihre eigene IP-Adresse erhält.

Da sich dies aufgrund des knappen IP-Adressrahmens (zumindest bis IPv6 global eingeführt wird) nicht ändern lässt, muss man andere Möglichkeiten finden. Eine dieser Möglichkeiten stellt SNI dar. Eine andere wären Subject-Alternative-Name-Zertifikate (SAN): Bei diesen Zertifikaten hat man die Möglichkeit, mehrere Domains bzw. Hostnamen einzutragen. Das würde im Umkehrschluss bedeuten, dass es für den Server egal ist, welche Domain der Client tatsächlich ansprechen möchte, denn das Zertifikat ist für alle Domains auf dem Server gültig. Der Nachteil dieser Zertifikate ist aber, dass sie vergleichsweise kostspielig sind. Deshalb sind viele Website-Betreiber verständlicherweise nicht bereit, solche Zertifikate zu implementieren. Statt also gar keine Verschlüsselung einzusetzen, stellt SNI eine gute Zwischenlösung dar.