Vetrauenskette bei DNSSEC im LAB: Unterschied zwischen den Versionen
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 | + | | 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 | + | * 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> | + | *# 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 | + | 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 | + | 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:
- holt DS-Record und RRSIG aus der .int-Zone
- entschlüsselt die Signatur mit dem ZSK von .int (öffentlich)
- berechnet selbst den Hash über den DS-Record
- 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:
- holt DNSKEY-Record und RRSIG von it213.int
- entschlüsselt die Signatur mit dem KSK von it213.int (öffentlich) (bereits vertraut aus Schritt 2)
- berechnet selbst den Hash über den DNSKEY-Record
- 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:
- holt A-Record und RRSIG von it213.int
- berechnet selbst den Hash des A-Records
- entschlüsselt die Signatur mit dem ZSK von it213.int (öffentlich)
- 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.
