Frage Wie weiß ein Webserver, welches Schlüsselpaar für die SSL-Entschlüsselung verwendet werden soll?


Wenn Apache eine Anforderung an einen der TCP-Ports empfängt, auf denen er abhört (z. B. 80, 443), wird es verständlicherweise entscheiden, welcher Host durch Betrachten des HTTP-Headers angefragt wird Host. Der Server wird dann wissen, an welchen virtuellen Host er die Anfrage umleiten soll.

Aber wie funktioniert es für HTTP über SSL / TLS? Da die gesamte HTTP-Anfrage verschlüsselt wird (zumindest glaube ich, dass ich irgendwo gelesen habe), können die Header-Informationen nur gelesen werden, nachdem der Server die Daten entschlüsselt hat. Um zu entschlüsseln, muss es jedoch wissen, welches Schlüsselpaar verwendet werden soll, da mehrere SSL-Zertifikate auf einem Webserver installiert sein können.

Wie weiß der Server also, welchen Schlüssel er für die Entschlüsselung benötigt?


Meine Vermutung:

Ich könnte mir vorstellen, dass der TLS-Handshake die notwendigen Informationen liefert.


Hinsichtlich der "möglich duplizieren" Flagge:

Während ich zustimme, dass die Antworten zu der verknüpften Frage und meiner eigenen sind ähnlich, ich muss sagen, die Frage ist anders. Es kommt nicht in Frage, ob oder wie das Hosting mehrerer Sites mit unabhängigen SSL-Zertifikaten möglich ist. Stattdessen behandelt meine Frage den zugrunde liegenden technischen Aspekt.


18
2017-12-26 11:35


Ursprung


Verbunden: serverfault.com/questions/126072/... - Ilmari Karonen
Mögliches Duplikat von Mehrere SSL-Domänen unter derselben IP-Adresse und demselben Port? - Bob
Ich stimme dem zu Antworten sind mir ziemlich ähnlich, aber ich glaube das Fragen sind ganz anders. - paolo


Antworten:


Ursprünglich wusste der Webserver nicht. Aus diesem Grund benötigten Sie für jeden SSL-vhost, den Sie auf dem Server hosten wollten, eine separate IP-Adresse. Auf diese Weise wusste der Server, dass, wenn eine Verbindung über IP X kam, er die Konfiguration (einschließlich der Zertifikate) für den zugehörigen vhost verwenden musste.

Dies änderte sich mit Servernamenanzeigeeine TLS-Erweiterung, die es einem Client tatsächlich ermöglicht, den erforderlichen Hostnamen im Handshake-Prozess anzugeben. Diese Erweiterung wird in allen modernen Betriebssystemen verwendet, aber alte Browser oder Server unterstützen sie nicht. Wenn Sie also erwarten, dass Clients weiterhin IE 6 unter WinXP verwenden, wären Sie kein Glück mehr.


29
2017-12-26 11:45



Wenn jemand XP benutzt, verdient er trotzdem nicht, meine Seite zu besuchen;) - paolo
Wenn Clients auf diese Weise eingeschränkt werden (Browser, nicht Personen), muss sehr vorsichtig vorgegangen werden. Viele, viele Unternehmen aktualisieren Windows nicht sehr gut, und das gleiche ist tru mit einigen Android-Handy-Anbietern, sie in der Regel nicht aktualisieren ihr Betriebssystem überhaupt (oder zumindest nicht viel). Windows XP ist bei 8% und der vor 4,4 Android Marktanteil scheint riesig. - coteyr
Falls der Server keine SNI-Unterstützung hat, ist es möglich, einen Proxy mit SNI-Unterstützung vor einem Server ohne SNI-Unterstützung zu verwenden. - kasperd
@coteyr Die große Mehrheit der verbleibenden XP-Nutzer befindet sich in China. Woanders ist glücklicherweise zumindest im Internet wenig verbreitet. - Michael Hampton♦


Es scheint, dass Sie einige Missverständnisse über TLS / SSL haben. Die HTTP-Anfrage wird nicht vom öffentlichen Schlüssel des Servers verschlüsselt. Es wird durch eine symmetrische Chiffre unter Verwendung eines Schlüssels verschlüsselt, der in einem vorherigen Handshake ausgehandelt wurde.

Kurze Beschreibung des TLS-Handshakes: Server und Client verhandeln eine Verschlüsselungssuite, symmetrische Schlüssel und einige andere Details. Um MITM zu verhindern, sendet der Server normalerweise sein Zertifikat (Kette) an den Client und authentifiziert den Handshake mit dem Schlüssel im Zertifikat. (Es gibt auch einige andere Varianten, z. B. Clientauthentifizierung oder TLS-PSK, sie werden jedoch bei HTTP nicht häufig verwendet.) Der Client kann das Zertifikat (wie üblich) entweder validieren oder ignorieren.

Während SNI wichtig ist, wenn mehrere TLS-Zertifikate in einer IP verwendet werden, ist es nicht unbedingt erforderlich, dass der Server die Anforderung entschlüsseln kann. Ohne SNI weiß der Server nicht, welche Zertifikatskette gesendet werden sollte, daher wählt der Server normalerweise einen (z. B. den ersten vhost) aus, was natürlich ein falscher sein könnte. Wenn der Server eine falsche Zertifikatskette auswählt, sollte der Client dies ablehnen (also nicht mit dem Senden der HTTP-Anfrage fortfahren). Wenn der Client das Zertifikat jedoch ignoriert (oder wenn das ungültige Zertifikat für diese Site als vertrauenswürdig markiert ist), kann es erfolgreich fortgesetzt werden. Da der für die Verschlüsselung verwendete symmetrische Schlüssel nicht vom Zertifikat abhängt (TLS soll auch ohne Zertifikate funktionieren), kann der Server ihn entschlüsseln.

Nur eine kleine Anmerkung, warum ich über TLS schreibe, während Sie nach SSL gefragt haben: TLS ist eine neue Version von SSL. Alle Versionen von SSL werden für die allgemeine Verwendung als unsicher angesehen. Daher verwenden wir jetzt hauptsächlich TLS (1.0, 1.1, 1.2).


7
2017-12-26 20:17



"Die HTTP-Anfrage wird nicht durch den öffentlichen Schlüssel des Servers verschlüsselt. Er wird durch eine symmetrische Verschlüsselung mit einem Schlüssel verschlüsselt, der im vorherigen Handshake ausgehandelt wurde." Wusste das nicht, danke fürs Heads-up! Ich weiß jedoch, dass TLS SSL ersetzt hat, aber wir blieben beim herkömmlichen Begriff "SSL-Zertifikat", daher meine Erwähnung. - paolo
Ich weiß, dass Begriffe wie "SSL-Zertifikat" ziemlich oft für TLS sind. Ich versuche, sie zu vermeiden, aber ich war mir nicht sicher, ob Sie (oder andere) den Begriff TLS kennen. - v6ak