Der Hostname ist im ersten SSL-Handshake enthalten, um Server zu unterstützen, die mehrere Hostnamen (mit unterschiedlichen Zertifikaten) auf derselben IP-Adresse haben (SNI: Server Name Indication). Dies ähnelt dem Host-Header in einfachen HTTP-Anforderungen. Der Name ist in der ersten Nachricht des Clients (ClientHello) enthalten, dh bevor eine Identifizierung und ein Schlüsselaustausch durchgeführt werden, damit der Server das richtige Zertifikat zur Identifizierung anbieten kann.
Während das Verschlüsseln des Hostnamens nett wäre, wäre die Frage, welcher Schlüssel für die Verschlüsselung verwendet werden soll. Der Schlüsselaustausch erfolgt erst nach Identifizierung der Site durch Zertifikat, da Sie sonst möglicherweise Schlüssel mit einem Mann in der Mitte austauschen. Die Identifikation mit Zertifikaten erfordert jedoch bereits den Hostnamen, damit der Server das passende Zertifikat anbieten kann. Die Verschlüsselung des Hostnamens müsste also mit einem Schlüssel erfolgen, der entweder auf einer anderen Art der Identifizierung basiert oder nicht sicher gegen Man-in-the-Middle ist.
Es könnte Möglichkeiten zum Schutz geben Der Hostname im SSL-Handshake, jedoch auf Kosten des zusätzlichen Overheads bei Handshake und Infrastruktur. Es wird derzeit diskutiert, ob und wie verschlüsselte SNI in TLS 1.3 aufgenommen werden können. Ich schlage vor, Sie sehen sich diese Präsentation und die IETF-TLS-Mailingliste an.
Abgesehen davon kann es auch bei anderen zu einem Verlust des Hostnamens kommen bedeutet, wie die vorhergehende DNS-Suche nach dem Namen. Und natürlich ist das in der Serverantwort gesendete Zertifikat auch nicht verschlüsselt (dasselbe Problem, noch kein Schlüssel), und daher kann das angeforderte Ziel aus der Serverantwort extrahiert werden.
Es gibt viele Websites da draußen Dies funktioniert nicht ohne SNI, wie alle kostenlosen SSL-Angebote von Cloudflares. Wenn ein Client darauf zugreift, der SNI nicht unterstützt (wie IE8 unter Windows XP), führt dies entweder zu einem falschen Zertifikat oder zu einem SSL-Handshake-Fehler wie "unbekannter_name".