Vetrauenskette bei DNSSEC im LAB: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „==Grundlegendes== * DNSSEC ergänzt DNS um kryptografische Signaturen. * Diese Signaturen garantieren '''Authentizität''' (Antwort kommt vom richtigen Nameser…“)
 
Zeile 25: Zeile 25:
 
| '''Delegation'''
 
| '''Delegation'''
 
| DS-Record für it213.int
 
| DS-Record für it213.int
| Signiert vom ZSK der .int-Zone
+
| Signiert vom ZSK von .int (privat)
 
|-
 
|-
 
| '''Domain-Schlüssel'''
 
| '''Domain-Schlüssel'''
 
| DNSKEY von it213.int
 
| DNSKEY von it213.int
| KSK durch DS bestätigt → ZSK vertraut
+
| KSK von it213.int durch DS bestätigt → ZSK von it213.int vertraut
 
|-
 
|-
 
| '''Nutzdaten'''
 
| '''Nutzdaten'''
 
| RRSIG des A-Records mail.it213.int
 
| RRSIG des A-Records mail.it213.int
| Signiert vom ZSK it213.int
+
| Signiert vom ZSK von it213.int (privat)
 
|}
 
|}
  
Zeile 47: Zeile 47:
 
* Dieser ist fest im Resolver hinterlegt (z. B. in BIND oder Unbound als '''trusted-keys''' bzw. '''trust-anchor''').
 
* Dieser ist fest im Resolver hinterlegt (z. B. in BIND oder Unbound als '''trusted-keys''' bzw. '''trust-anchor''').
 
* Er ist der Startpunkt der Vertrauenskette.
 
* Er ist der Startpunkt der Vertrauenskette.
 +
* Der Resolver vertraut damit dem <span style="color:#007BFF;">KSK von .int (öffentlich)</span>.
  
 
===Schritt 2: Delegation – DS-Record für it213.int===
 
===Schritt 2: Delegation – DS-Record für it213.int===
* Die .int-Zone enthält einen DS-Record für it213.int.
+
* Die .int-Zone veröffentlicht einen DNSKEY-Record mit dem <span style="color:#007BFF;">KSK von .int (öffentlich)</span> und dem <span style="color:#FF0000;">ZSK von .int (öffentlich)</span>.
* Der DS-Record enthält den Hash des <span style="color:#FF0000;">KSK von it213.int (öffentlich)</span>.
+
* Der <span style="color:#008000;">KSK von .int (privat)</span> signiert diesen DNSKEY-Record → RRSIG.
 +
* Der Resolver prüft diesen DNSKEY-Record mit dem bereits vertrauten <span style="color:#007BFF;">KSK von .int (öffentlich)</span>.
 +
* Der Resolver vertraut nun dem <span style="color:#007BFF;">ZSK von .int (öffentlich)</span>.
 +
* Die .int-Zone enthält einen DS-Record für it213.int – dieser enthält den Hash des <span style="color:#FF0000;">KSK von it213.int (öffentlich)</span>.
 
* Der <span style="color:#008000;">ZSK von .int (privat)</span> signiert diesen DS-Record → RRSIG.
 
* Der <span style="color:#008000;">ZSK von .int (privat)</span> signiert diesen DS-Record → RRSIG.
 
* Der Resolver:
 
* Der Resolver:
 
*# holt DS-Record und RRSIG aus der .int-Zone
 
*# holt DS-Record und RRSIG aus der .int-Zone
*# entschlüsselt die Signatur mit dem <span style="color:#007BFF;">ZSK von .int (öffentlich)</span> (aus dem DNSKEY der .int-Zone, der durch den Trust Anchor bestätigt ist)
+
*# entschlüsselt die Signatur mit dem <span style="color:#007BFF;">ZSK von .int (öffentlich)</span>
 
*# berechnet selbst den Hash über den DS-Record
 
*# berechnet selbst den Hash über den DS-Record
 
*# vergleicht beide Werte – stimmen sie überein → DS-Record authentisch
 
*# vergleicht beide Werte – stimmen sie überein → DS-Record authentisch
Zeile 60: Zeile 64:
  
 
===Schritt 3: Domain-Schlüssel – DNSKEY von it213.int===
 
===Schritt 3: Domain-Schlüssel – DNSKEY von it213.int===
* it213.int veröffentlicht seinen DNSKEY-Record mit <span style="color:#007BFF;">KSK (öffentlich)</span> und <span style="color:#FF0000;">ZSK (öffentlich)</span>.
+
* it213.int veröffentlicht seinen DNSKEY-Record mit dem <span style="color:#007BFF;">KSK von it213.int (öffentlich)</span> und dem <span style="color:#FF0000;">ZSK von it213.int (öffentlich)</span>.
 
* Der <span style="color:#008000;">KSK von it213.int (privat)</span> signiert den DNSKEY-Record → RRSIG.
 
* Der <span style="color:#008000;">KSK von it213.int (privat)</span> signiert den DNSKEY-Record → RRSIG.
 
* Der Resolver:
 
* Der Resolver:
*# holt DNSKEY-Record und RRSIG
+
*# holt DNSKEY-Record und RRSIG von it213.int
 
*# entschlüsselt die Signatur mit dem <span style="color:#007BFF;">KSK von it213.int (öffentlich)</span> (bereits vertraut aus Schritt 2)
 
*# entschlüsselt die Signatur mit dem <span style="color:#007BFF;">KSK von it213.int (öffentlich)</span> (bereits vertraut aus Schritt 2)
 
*# berechnet selbst den Hash über den DNSKEY-Record
 
*# berechnet selbst den Hash über den DNSKEY-Record
*# vergleicht beide Werte – stimmen sie überein → DNSKEY authentisch
+
*# vergleicht beide Werte – stimmen sie überein → DNSKEY-Record authentisch
 
* Der Resolver vertraut nun dem <span style="color:#007BFF;">ZSK von it213.int (öffentlich)</span>.
 
* Der Resolver vertraut nun dem <span style="color:#007BFF;">ZSK von it213.int (öffentlich)</span>.
  
Zeile 72: Zeile 76:
 
* Der autoritative Nameserver von it213.int signiert den A-Record mit dem <span style="color:#008000;">ZSK von it213.int (privat)</span> → RRSIG.
 
* Der autoritative Nameserver von it213.int signiert den A-Record mit dem <span style="color:#008000;">ZSK von it213.int (privat)</span> → RRSIG.
 
* Der Resolver:
 
* Der Resolver:
*# holt A-Record und RRSIG
+
*# holt A-Record und RRSIG von it213.int
 
*# berechnet selbst den Hash des A-Records
 
*# berechnet selbst den Hash des A-Records
 
*# entschlüsselt die Signatur mit dem <span style="color:#007BFF;">ZSK von it213.int (öffentlich)</span>
 
*# entschlüsselt die Signatur mit dem <span style="color:#007BFF;">ZSK von it213.int (öffentlich)</span>
Zeile 79: Zeile 83:
 
==Begriffe==
 
==Begriffe==
 
; DS (Delegation Signer): Hash des öffentlichen KSK der Kind-Zone, hinterlegt in der Eltern-Zone.
 
; DS (Delegation Signer): Hash des öffentlichen KSK der Kind-Zone, hinterlegt in der Eltern-Zone.
; KSK (Key Signing Key): Signiert nur den DNSKEY-RRset (die Schlüssel selbst).
+
; KSK (Key Signing Key): Signiert nur den DNSKEY-RRset der eigenen Zone (die Schlüssel selbst).
; ZSK (Zone Signing Key): Signiert die eigentlichen Nutzdaten (A, AAAA, MX usw.).
+
; ZSK (Zone Signing Key): Signiert die eigentlichen Nutzdaten der eigenen Zone (A, AAAA, MX usw.).
 
; RRSIG: Digitale Signatur für einen Resource Record Set.
 
; RRSIG: Digitale Signatur für einen Resource Record Set.
; Trust Anchor: Öffentlicher KSK, dem der Resolver blind vertraut – Startpunkt der Kette.
+
; Trust Anchor: Öffentlicher KSK von .int, dem der Resolver blind vertraut – Startpunkt der Kette.
  
 
==DNSSEC manuell prüfen mit dig==
 
==DNSSEC manuell prüfen mit dig==
  
===Trust Anchor prüfen===
+
===Trust Anchor und DNSKEY von .int prüfen===
 
<pre>dig int DNSKEY +dnssec</pre>
 
<pre>dig int DNSKEY +dnssec</pre>
Zeigt den DNSKEY der .int-Zone. Das '''ad'''-Flag im Header zeigt an, dass der lokale Resolver DNSSEC validiert.
+
Zeigt den DNSKEY-Record der .int-Zone mit KSK von .int (öffentlich) und ZSK von .int (öffentlich). Das '''ad'''-Flag im Header zeigt an, dass der lokale Resolver DNSSEC validiert.
  
 
===DS-Record für it213.int prüfen===
 
===DS-Record für it213.int prüfen===
 
<pre>dig it213.int DS +dnssec</pre>
 
<pre>dig it213.int DS +dnssec</pre>
Zeigt den DS-Record, der in der .int-Zone hinterlegt ist.
+
Zeigt den DS-Record in der .int-Zone – enthält den Hash des KSK von it213.int (öffentlich).
  
 
===DNSKEY von it213.int prüfen===
 
===DNSKEY von it213.int prüfen===
 
<pre>dig it213.int DNSKEY +dnssec</pre>
 
<pre>dig it213.int DNSKEY +dnssec</pre>
Zwei Keys erwartet: KSK (Flag 257) und ZSK (Flag 256).
+
Zwei Keys erwartet: KSK von it213.int (Flag 257) und ZSK von it213.int (Flag 256).
  
 
===A-Record und Signatur prüfen===
 
===A-Record und Signatur prüfen===
 
<pre>dig mail.it213.int A +dnssec</pre>
 
<pre>dig mail.it213.int A +dnssec</pre>
In der ANSWER SECTION erscheinen A-Record und RRSIG direkt darunter.
+
In der ANSWER SECTION erscheinen der A-Record und direkt darunter der RRSIG – signiert vom ZSK von it213.int (privat).
  
 
===Komplette Kette verfolgen===
 
===Komplette Kette verfolgen===
 
<pre>dig mail.it213.int A +trace +dnssec</pre>
 
<pre>dig mail.it213.int A +trace +dnssec</pre>
 
Zeigt die Delegation Schritt für Schritt von .int abwärts.
 
Zeigt die Delegation Schritt für Schritt von .int abwärts.

Version vom 2. Juni 2026, 05:11 Uhr

Grundlegendes

  • DNSSEC ergänzt DNS um kryptografische Signaturen.
  • Diese Signaturen garantieren Authentizität (Antwort kommt vom richtigen Nameserver) und Integrität (Antwort wurde nicht manipuliert).
  • DNSSEC verschlüsselt nicht – DNS-Abfragen sind weiterhin im Klartext lesbar.
  • DNSSEC schützt nur die Strecke bis zum validierenden Resolver. Zwischen Resolver und Client findet keine Validierung statt.

Aufbau

  • Dieser Beitrag enthält eine Rahmenhandlung.

Szenario im Lab

  • Der Resolver von ns.it201.int löst mail.it213.int auf.
  • Der Resolver hat den Trust Anchor für .int fest hinterlegt.
  • Die Root-Zone und TLD-Validierung entfallen damit vollständig.

Die Vertrauenskette hat dadurch nur noch drei Stufen:

Stufe Vertrauens-Objekt Validiert durch
Trust Anchor KSK von .int (öffentlich) Fest im Resolver hinterlegt
Delegation DS-Record für it213.int Signiert vom ZSK von .int (privat)
Domain-Schlüssel DNSKEY von it213.int KSK von it213.int durch DS bestätigt → ZSK von it213.int vertraut
Nutzdaten RRSIG des A-Records mail.it213.int Signiert vom ZSK von it213.int (privat)

Farbkonvention

  • Grün – privater Schlüssel (muss nie vertraut werden, bleibt geheim)
  • Rot – öffentlicher Schlüssel (noch nicht vertraut)
  • Blau – öffentlicher Schlüssel (vertraut)

Ablauf der Validierung

Schritt 1: Trust Anchor – .int

  • Der Resolver kennt den KSK von .int (öffentlich) als Trust Anchor.
  • Dieser ist fest im Resolver hinterlegt (z. B. in BIND oder Unbound als trusted-keys bzw. trust-anchor).
  • Er ist der Startpunkt der Vertrauenskette.
  • Der Resolver vertraut damit dem KSK von .int (öffentlich).

Schritt 2: Delegation – DS-Record für it213.int

  • Die .int-Zone veröffentlicht einen DNSKEY-Record mit dem KSK von .int (öffentlich) und dem ZSK von .int (öffentlich).
  • Der KSK von .int (privat) signiert diesen DNSKEY-Record → RRSIG.
  • Der Resolver prüft diesen DNSKEY-Record mit dem bereits vertrauten KSK von .int (öffentlich).
  • Der Resolver vertraut nun dem ZSK von .int (öffentlich).
  • Die .int-Zone enthält einen DS-Record für it213.int – dieser enthält den Hash des KSK von it213.int (öffentlich).
  • Der ZSK von .int (privat) signiert diesen DS-Record → RRSIG.
  • Der Resolver:
    1. holt DS-Record und RRSIG aus der .int-Zone
    2. entschlüsselt die Signatur mit dem ZSK von .int (öffentlich)
    3. berechnet selbst den Hash über den DS-Record
    4. vergleicht beide Werte – stimmen sie überein → DS-Record authentisch
  • Der Resolver vertraut nun dem KSK von it213.int (öffentlich).

Schritt 3: Domain-Schlüssel – DNSKEY von it213.int

  • it213.int veröffentlicht seinen DNSKEY-Record mit dem KSK von it213.int (öffentlich) und dem ZSK von it213.int (öffentlich).
  • Der KSK von it213.int (privat) signiert den DNSKEY-Record → RRSIG.
  • Der Resolver:
    1. holt DNSKEY-Record und RRSIG von it213.int
    2. entschlüsselt die Signatur mit dem KSK von it213.int (öffentlich) (bereits vertraut aus Schritt 2)
    3. berechnet selbst den Hash über den DNSKEY-Record
    4. vergleicht beide Werte – stimmen sie überein → DNSKEY-Record authentisch
  • Der Resolver vertraut nun dem ZSK von it213.int (öffentlich).

Schritt 4: Nutzdaten – A-Record mail.it213.int

  • Der autoritative Nameserver von it213.int signiert den A-Record mit dem ZSK von it213.int (privat) → RRSIG.
  • Der Resolver:
    1. holt A-Record und RRSIG von it213.int
    2. berechnet selbst den Hash des A-Records
    3. entschlüsselt die Signatur mit dem ZSK von it213.int (öffentlich)
    4. vergleicht beide Werte – stimmen sie überein → A-Record authentisch und unmanipuliert

Begriffe

DS (Delegation Signer)
Hash des öffentlichen KSK der Kind-Zone, hinterlegt in der Eltern-Zone.
KSK (Key Signing Key)
Signiert nur den DNSKEY-RRset der eigenen Zone (die Schlüssel selbst).
ZSK (Zone Signing Key)
Signiert die eigentlichen Nutzdaten der eigenen Zone (A, AAAA, MX usw.).
RRSIG
Digitale Signatur für einen Resource Record Set.
Trust Anchor
Öffentlicher KSK von .int, dem der Resolver blind vertraut – Startpunkt der Kette.

DNSSEC manuell prüfen mit dig

Trust Anchor und DNSKEY von .int prüfen

dig int DNSKEY +dnssec

Zeigt den DNSKEY-Record der .int-Zone mit KSK von .int (öffentlich) und ZSK von .int (öffentlich). Das ad-Flag im Header zeigt an, dass der lokale Resolver DNSSEC validiert.

DS-Record für it213.int prüfen

dig it213.int DS +dnssec

Zeigt den DS-Record in der .int-Zone – enthält den Hash des KSK von it213.int (öffentlich).

DNSKEY von it213.int prüfen

dig it213.int DNSKEY +dnssec

Zwei Keys erwartet: KSK von it213.int (Flag 257) und ZSK von it213.int (Flag 256).

A-Record und Signatur prüfen

dig mail.it213.int A +dnssec

In der ANSWER SECTION erscheinen der A-Record und direkt darunter der RRSIG – signiert vom ZSK von it213.int (privat).

Komplette Kette verfolgen

dig mail.it213.int A +trace +dnssec

Zeigt die Delegation Schritt für Schritt von .int abwärts.