TLS: Metadaten beim Handshake verraten welche Webseite man aufruft

Im Kuketz-Forum hat Jule eine interessante Frage gestellt:

Mal angenommen, ich hätte jetzt irgendwie eine sichere DNS-Abfrage hinbekommen, so dass beispielsweise meinem ISP nicht bekannt ist, welche Domain genau ich auf einer IP aufrufe. Wie sieht dass dann im restlichen TLS aushandeln aus? Wird da z.B. beim Abgleichen der Zertifikate etc. irgendwo doch der Domain Name offen gelegt oder ist das schon alles durchgehend verschlüsselt von Anfang an?

Ich wette, dass die wenigsten von euch eine Antwort darauf kennen. Daher hier meine:

Der Hostname ist im anfänglichen TLS-Handshake enthalten, um Server zu unterstützen, die mehrere Hostnamen (mit unterschiedlichen Zertifikaten) auf derselben IP-Adresse ausliefern (Stichwort: Server Name Indication). Dies ist vergleichbar mit dem Header bei Plain-HTTP-Requests. Der Domainname ist in der ersten Nachricht des Clients (Client Hello) enthalten, d.h. vor jedem Identifizierungs- und Schlüsselaustausch. Das ist notwendig, damit der Server das richtige Zertifikat zur Identifizierung anbieten kann.

Rufe ich bspw. »https://www.recht-technisch.de« auf so schickt der Client während des TLS-Handshakes die folgende Nachricht (Client Hello):

0000 ac fd ce 21 2d 8e e8 2a ea 79 ab d0 08 00 45 00 ...!-..*.y....E.
 0010 00 e5 5d 7a 40 00 40 06 a6 0f c0 a8 96 0a bc 44 ..]z@.@........D
 0020 23 92 8e d4 01 bb 38 1e bc 26 90 58 67 ce 50 18 #.....8..&.Xg.P.
 0030 00 e5 fb 3f 00 00 16 03 01 00 b8 01 00 00 b4 03 ...?............
 0040 03 97 61 63 97 83 bf ac 9c 85 e0 cf f1 1d 46 42 ..ac..........FB
 0050 4d eb b7 ef 72 29 74 d4 f5 46 1c b3 4e 15 27 d5 M...r)t..F..N.'.
 0060 ab 00 00 14 c0 2b c0 2f cc a9 cc a8 c0 2c c0 30 .....+./.....,.0
 0070 c0 0a c0 14 00 2f 00 35 01 00 00 77 00 00 00 1b ...../.5...w....
 0080 00 19 00 00 16 77 77 77 2e 72 65 63 68 74 2d 74 .....www.recht-t
 0090 65 63 68 6e 69 73 63 68 2e 64 65 00 17 00 00 ff echnisch.de.....
 00a0 01 00 01 00 00 0a 00 0a 00 08 00 1d 00 17 00 18 ................
 00b0 00 19 00 0b 00 02 01 00 00 10 00 0e 00 0c 02 68 ...............h
 00c0 32 08 68 74 74 70 2f 31 2e 31 00 05 00 05 01 00 2.http/1.1......
 00d0 00 00 00 ff 03 00 00 00 0d 00 18 00 16 04 03 05 ................
 00e0 03 06 03 08 04 08 05 08 06 04 01 05 01 06 01 02 ................
 00f0 03 02 01 ...

Der Domainname (www.recht-technisch.de) wird also im Klartext übermittelt – aufgrund der TLS-Extension Server Name Indication. Ich denke, dass ist den meisten überhaupt nicht bewusst.

Für TLS 1.3 existiert ein Draft (SNI Encryption in TLS Through Tunneling), um dieses »Metadaten-Problem« zu lösen.

Zusammengefasst gilt bis TLS Version 1.2:

  • Jeder, der den HTTPS-Verkehr mitliest, kann den Domainnamen aufgrund von SNI im Klartext sehen.
  • ClientHello-Nachrichten enthalten eine Menge Metadaten, die es ermöglichen, eine Client-Anwendung zu identifizieren.
  • Beim TLS-Handshake senden sowohl der Client als auch der Server ihre Ortszeit im Klartext.

Dagegen hilft kein DNS-over-TLS, sondern nur eine Anpassung des TLS-Protokolls für die HTTP(S)-Kommunikation. Inwieweit das bei TLS 1.3 nun umgesetzt ist, kann ich aktuell nicht beantworten. Da müsste ich mich genauer einlesen. Fakt ist, es existiert aktuell ein Draft, der vermutlich dann auch so in TLS 1.3 umgesetzt wird.

Falls jemand Hinweise hat, kann er mir gerne eine E-Mail übersenden.

Hilf mit die Spendenziele zu erreichen! Mitmachen ➡