Ja, aber es gibt einige Einschränkungen.
Dies wird durch die Angabe des Servernamens erreicht, eine Erweiterung der Transportschichtsicherheit.
Was ist die Angabe des Servernamens?
Die Angabe des Servernamens ( RFC 6066 ; veralteter RFC 4366 , RFC 3546 ) ist eine Erweiterung der Transport Layer Security , mit der der Client dem Server den Namen des Hosts mitteilen kann, den er zu erreichen versucht.
SNI ist gemäß Spezifikation mit TLS 1.0 und höher kompatibel, die Implementierungen können jedoch variieren (siehe unten). Es kann nicht mit SSL verwendet werden, daher muss eine Verbindung TLS (siehe RFC 4346, Anhang E ) aushandeln, damit SNI verwendet werden kann. Dies geschieht in der Regel automatisch mit unterstützter Software.
Warum wird SNI benötigt?
Bei einer normalen HTTP- Verbindung informiert der Browser den Server über den Hostnamen des Servers, den er über den Host:
Header erreichen möchte. Auf diese Weise kann ein Webserver mit einer einzigen IP-Adresse Inhalte für mehrere Hostnamen bereitstellen, was allgemein als namensbasiertes virtuelles Hosting bezeichnet wird .
Die Alternative besteht darin, jedem zu versorgenden Webhostnamen eine eindeutige IP-Adresse zuzuweisen. Dies wurde häufig in den Anfängen des Webs getan, bevor allgemein bekannt war, dass IP-Adressen ausgehen und Maßnahmen zur Beibehaltung ergriffen werden, und wird auch für virtuelle SSL-Hosts (ohne SNI) auf diese Weise durchgeführt.
Da bei dieser Methode zur Übertragung des Hostnamens die Verbindung bereits hergestellt sein muss, funktioniert sie nicht mit SSL / TLS-Verbindungen. Zum Zeitpunkt der Einrichtung der sicheren Verbindung muss der Webserver bereits wissen, welchen Hostnamen er dem Client bereitstellen soll, da der Webserver selbst die sichere Verbindung herstellt.
SNI behebt dieses Problem, indem der Client den Hostnamen im Rahmen der TLS-Aushandlung überträgt, sodass der Server bereits weiß, welcher virtuelle Host für die Bereitstellung der Verbindung verwendet werden soll. Der Server kann dann das Zertifikat und die Konfiguration für den richtigen virtuellen Host verwenden.
Warum nicht unterschiedliche IP-Adressen verwenden?
Der HTTP- Host:
Header wurde so definiert, dass aufgrund des Mangels an IPv4-Adressen, der bereits Mitte der neunziger Jahre als Problem erkannt wurde, mehr als ein Webhost von einer einzelnen IP-Adresse aus bedient werden kann. In gemeinsam genutzten Webhosting-Umgebungen können auf diese Weise Hunderte von eindeutigen, nicht verwandten Websites mit einer einzigen IP-Adresse bedient werden, wodurch der Adressraum geschont wird.
Shared-Hosting-Umgebungen stellten dann fest, dass der größte Verbraucher von IP-Adressräumen die Notwendigkeit sicherer Websites mit eindeutigen IP-Adressen war, was SNI als Stop-Gap-Maßnahme auf dem Weg zu IPv6 erforderlich machte. Heutzutage ist es manchmal schwierig, nur 5 IP-Adressen (/ 29) ohne wesentliche Begründung zu erhalten, was häufig zu Verzögerungen bei der Bereitstellung führt.
Mit dem Aufkommen von IPv6 sind solche Adresserhaltungstechniken nicht mehr erforderlich, da einem einzelnen Host mehr IPv6-Adressen zugewiesen werden können, als das gesamte Internet heute enthält, aber die Techniken werden wahrscheinlich in der Zukunft noch weit verbreitet sein, um ältere IPv4-Adressen zu bedienen Verbindungen.
Vorbehalte
Einige Kombinationen aus Betriebssystem und Browser unterstützen SNI nicht (siehe unten). Die Verwendung von SNI ist daher nicht für alle Situationen geeignet. Sites, die auf solche System- / Browserkombinationen abzielen, müssten auf SNI verzichten und weiterhin eindeutige IP-Adressen für jeden virtuellen Host verwenden.
Insbesondere unterstützt keine Version von Internet Explorer unter Windows XP SNI. Da diese Kombination immer noch einen signifikanten (aber stetig abnehmenden; laut NetMarketShare etwa 16% des Internetverkehrs im Dezember 2012) Teil des Internetverkehrs darstellt, wäre SNI für eine Website, die auf diese Nutzergruppen abzielt, ungeeignet.
Unterstützung
Viele, aber nicht alle gängigen Softwarepakete unterstützen SNI.
(Das Weglassen von dieser Liste bedeutet nicht notwendigerweise mangelnde Unterstützung. Es bedeutet, dass die Anzahl der Eingaben begrenzt war oder ich die Informationen bei einer Suche nicht schnell finden konnte. Wenn Ihr Softwarepaket nicht aufgeführt ist, wird gesucht für seinen Namen und sni
sollte zeigen, ob Unterstützung vorhanden ist und wie man es einrichtet.)
Bibliotheksunterstützung
Die meisten Pakete sind von einer externen Bibliothek abhängig, um SSL / TLS-Unterstützung bereitzustellen.
- GNU TLS
- JSSE (Oracle Java) 7 oder höher, nur als Client
- libcurl 7.18.1 oder höher
- NSS 3.1.1 oder höher
- OpenSSL 0.9.8j oder höher
- OpenSSL 0.9.8f oder höher mit configure-Flags
- Qt 4.8 oder höher
Server-Unterstützung
Die meisten aktuellen Versionen der gängigen Serversoftware unterstützen SNI. Setup-Anweisungen sind für die meisten von diesen verfügbar:
Kundendienst
Die meisten aktuellen Webbrowser und Befehlszeilen-Benutzeragenten unterstützen SNI.
Desktop
- Chrome 5 oder höher
- Chrome 6 oder höher unter Windows XP
- Firefox 2 oder höher
- Internet Explorer 7 oder höher unter Windows Vista / Server 2008 oder höher
- Internet Explorer unter Windows XP unterstützt SNI unabhängig von der IE-Version nicht
- Konqueror 4.7 oder höher
- Opera 8 oder höher (möglicherweise muss TLS 1.1 aktiviert sein, um zu funktionieren)
- Safari 3.0 unter Windows Vista / Server 2008 oder höher oder Mac OS X 10.5.6 oder höher
Handy, Mobiltelefon
- Android Browser auf 3.0 Honeycomb oder höher
- iOS Safari unter iOS 4 oder höher
- Windows Phone 7 oder höher
Befehlszeile
- cURL 7.18.1 oder höher
- wget 1.14 oder höher (Distributionen haben möglicherweise einen Patch für die SNI-Unterstützung zurückportiert)
Keine Unterstützung
- BlackBerry Browser
- Internet Explorer (beliebige Version) unter Windows XP
(Hinweis: Einige Informationen zu dieser Antwort stammen von Wikipedia .)