Internetový protokol DNS má počátky v roce 1983. Od svého vzniku prošel mnoha úpravami a je neustále rozvíjen. Mezi jeho nejvýznamnější rozšíření patří zabezpečení DNSSEC. O co jednodušší bylo v úvodním dílu zapnutí DNSSEC, o to složitější procesy probíhají pod kapotou. Dnes si přiblížíme jak DNSSEC funguje a jak ho lze efektivně provozovat se serverem Knot DNS.
Princip DNSSEC
V základní podobě DNS, když rekurzivní server zjišťuje odpověď na klientský dotaz, putují DNS odpovědi po síti bez jakékoli garance jejich původu a integrity obsahu. S postupným rozvojem Internetu a představením různých útoků na DNS bylo potřeba protokol nějak zabezpečit. Vzniklo proto rozšíření DNSSEC, jehož cílem je zajištění správnosti záznamů, které se v DNS přenášejí. DNSSEC dále zabezpečuje odpovědi na neexistující záznamy v zóně. Pro úplnost dodejme, že funkcí DNSSEC není šifrování provozu.
Protokol DNSSEC je založen na digitálním podepisování DNS záznamů pomocí kryptografie s veřejným klíčem. Protože jsou DNS záznamy uloženy hierarchicky v nezávislých zónách, musí být každá zóna zabezpečena zvlášť. Například naše testovací zóna xdp.cz. dále závisí na zabezpečení kořenové zóny . a zóny nejvyšší úrovně cz.
Zabezpečení DNSSEC lze provozovat ve dvou režimech:
- předpodepsání zóny – vhodné pro statické zóny, které lze podepsat předem. Výhodou je vysoký výkon odpovídání a možnost distribuce podepsané zóny na další servery,
- online podepisování odpovědí – vhodné pro generované odpovědi, které jsou doplněny o podpisy v době jejich zpracování a díky tomu lze poskytovat důkazy na neexistenci domén bez úniku informací o obsahu zóny. Nevýhodou je výrazně nižší výkon odpovídání a složitější provoz na více serverech.
Pro uložení základních informací souvisejících s DNSSEC slouží následující typy záznamů:
- DNSKEY – parametry veřejného klíče k podepisování,
- RRSIG – podpis sady záznamů stejného typu (tzv. RRsetu),
- NSEC (NSEC3) – informace o následujícím (hašovaném) existujícím jménu v zóně,
- DS – otisk veřejného klíče podřazené zóny pro provázání zabezpečení mezi zónami.
Podle použití klíčů se rozlišují dvě podepisovací schémata:
- Dvojice klíčů KSK (podepisuje RRset DNSKEY) a ZSK (podepisuje ostatní RRsety),
- Jeden společný klíč CSK (podepisuje všechny RRsety).
Největší nevýhodou schématu dvou klíčů KSK a ZSK jsou větší odpovědi na dotazy typu DNSKEY. Přináší však několik výhod:
- možnost použít algoritmus s rozdílnými velikostmi klíčů. Algoritmus se slabšími parametry pro klíč ZSK pak bude mít menší podpisy. Předpokladem je však jeho častější výměna. Aktuálně se týká už jen algoritmů založených na RSA. Nově nastupující algoritmy, které jsou založeny na eliptických křivkách (ECDSA, EdDSA), mají pevné velikosti klíčů.
- protože výměna ZSK nevyžaduje součinnost s nadřazenou zónou, je možné tuto operaci provádět častěji a rychleji.
- možnost oddělení správy DNSSEC mezi různé subjekty (např. CZ.NIC využívá Offline KSK).
Pro ukázku se dotážeme našeho primárního serveru na TXT záznam pro doménu xdp.cz. včetně jeho podpisu RRSIG:
$ kdig @ns1.xdp.cz xdp.cz txt +dnssec +multiline +noquestion +noopt +nostats ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 1981 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 1 ;; ANSWER SECTION: xdp.cz. 300 IN TXT "DNSSEC is easy!" xdp.cz. 300 IN RRSIG TXT 13 2 300 20211210191848 ( 20211126174848 44002 xdp.cz. 8Qx7oEU00LUW8ElXxE8/BqbRxfZ2tdN95ikNKU05 59JbAgLCr3lhzfj8DDVmxUhskqadF+rwn8wBxNM3 UzdjlQ== )
Pro validaci podpisu záznamu musíme nejprve zjistit odpovídající klíč ZSK ze stejné zóny:
$ kdig @ns1.xdp.cz xdp.cz dnskey +dnssec +multiline +noquestion +noopt +nostats ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 16172 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 3; AUTHORITY: 0; ADDITIONAL: 1 ;; ANSWER SECTION: xdp.cz. 300 IN DNSKEY 256 3 13 ( qbTIi76e9uMVM/Fuayxo6NB8lO99k01V9m73f29B yKyoURcuFn9zl+xmK7Q1eMEiP2E3lf1uavLxiXl5 FHSYDQ== ) ; ZSK, ECDSAP256SHA256 (256b), id = 44002 xdp.cz. 300 IN DNSKEY 257 3 13 ( ONGSk6Yko2ZDmzlASEh6H8ZOnVv2lrjLU2CCJKH6 QEaevH1vlH42sSDd+kCngJ4FKvXGpazCtAPbjHby 67iBxA== ) ; KSK, ECDSAP256SHA256 (256b), id = 32114 xdp.cz. 300 IN RRSIG DNSKEY 13 2 300 20211210202348 ( 20211126185348 32114 xdp.cz. 3UqQjpwc4dRrTxrM9mFX/M3xs08MIOLuh2uy/wml yTr7Q1psUfhLXSf2Y4LMUJEzCU4u/e0iq1rvIjwm NuJFfg== )
Abychom mohli klíč ZSK použít, musíme ověřit platnost podpisu pro celý RRset DNSKEY, který je podepsán klíčem KSK. Ten ale musíme ověřit přes jeho otisk DS v nadřazené zóně cz.:
$ kdig @a.ns.nic.cz xdp.cz ds +dnssec +multiline +noquestion +noopt +nostats ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 58870 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 1 ;; ANSWER SECTION: xdp.cz. 3600 IN DS 32114 13 2 ( 3EA51B0EE57236721C664C873A23579D8A2BBF9F FE9DBB2E192D8CD6D173EE5B ) xdp.cz. 3600 IN RRSIG DS 13 2 3600 20211212125003 ( 20211128112003 15479 cz. QUs4xIMuRRf8mxBAHhPIgTaxaMzBTHYpDhTaqajq 8kTDL+/wtHKzDvUkUi3RG9EvC8bY7bKtqhlAwixP XeEQmw== )
Pro ověření podpisu otisku klíče potřebujeme opět místní klíč ZSK:
$ kdig @a.ns.nic.cz cz dnskey +dnssec +multiline +noquestion +noopt +nostats ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 31912 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 3; AUTHORITY: 0; ADDITIONAL: 1 ;; ANSWER SECTION: cz. 3600 IN DNSKEY 256 3 13 ( Dh1LBvaqDXjBLfklh+bdHBcXo7d00HxxXeYZnNby nFaPdJa4N/XaMESAgECcQhRdTp73rjG5yJf6hX/q EWuqwg== ) ; ZSK, ECDSAP256SHA256 (256b), id = 15479 cz. 3600 IN DNSKEY 257 3 13 ( nqzH7xP1QU5UOVy/VvxFSlrB/XgX9JDJzj51PzIj 35TXjZTyalTlAT/f7PAfaSD5mEG1N8Vk9NmI2nxg QqhzDQ== ) ; KSK, ECDSAP256SHA256 (256b), id = 20237 cz. 3600 IN RRSIG DNSKEY 13 1 3600 20211212162134 ( 20211128145134 20237 cz. igkX1GI1LkofFiotWWQoPhr/L1xTgdt+71yUEzYO Dh8vOu6hShv8PCNPMAV2ICu43OFNzhWmh8fPo0mL RVXwYw== )
Pro ověření ZSK přes KSK doptáme příslušný otisk v kořenového zóně .:
$ kdig @a.root-servers.net cz ds +dnssec +multiline +noquestion +noopt +nostats ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 48007 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 1 ;; ANSWER SECTION: cz. 86400 IN DS 20237 13 2 ( CFF0F3ECDBC529C1F0031BA1840BFB835853B920 9ED1E508FFF48451D7B778E2 ) cz. 86400 IN RRSIG DS 8 1 86400 20211215050000 ( 20211202040000 14748 . f6wB1HdaQNaBuUuiwzDHmR/PRK6oy5A10ow7IXaj ZSJ8e6y+zjSPFFzZMH9P1fIBcFlYa/v7QhrrCRIZ yHQFifvhwiyvn0YIA093Yb8gcdeCOl1/7CVxADtg 8E698uh2t2Tv6U2sbaW7FxLD+dI2/JGRfmoVhB6J Bc2MZ5jCuqa+46wJp2iS757L13hcbS61nP5YstU5 gfc6gnaI3PD5MoSZpx0fo1cUcDpdulyszm2E4vDg baedkW/2vvTjuxxXvEb/Jt7YDLG1ZC7RJxoL+33W WF0Skq1RP4oi0rh7EKESKfa/L/Fc6dwWoLxpHdab R5xKtHgwi/N57vP42Xr37A== )
A pro platnost otisku použijeme aktuální ZSK kořenové zóny:
$ kdig @a.root-servers.net . dnskey +dnssec +multiline +noquestion +noopt +nostats ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 1570 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 3; AUTHORITY: 0; ADDITIONAL: 1 ;; ANSWER SECTION: . 172800 IN DNSKEY 256 3 8 ( AwEAAY+oUaY0b7Z45vRD1ef/GykZqgHJtfdzRcnQ NvGVQAqlH22QChtG+n1EMugw7T/6uDBAGlRIkXAS dtHXhxStb9lPpyQe5/JIuMIlg+NhxKxEJ5e3J9SS PCavvDhH/BPrBCJwn8b68QAWRjVW6Rgdx63pUm7l fsimiWGMfplHNvcZWgVbKA9OI2o2lU8rT8n7zuwt lZPNpDLSI5GzrJgIiKR2Id16fmAgTJBOw14Xye/t 4/BxTdxeMiiVFwA4KUV2VeqspHKSHFOz+lUIIqBR knEmYpSvnxnyi0n1n4tGnGP8z6ZwRACi1Rw0nCu7 BGOU9M6LpInRoW/W4KXLODr6xqU= ) ; ZSK, RSASHA256 (2048b), id = 14748 . 172800 IN DNSKEY 257 3 8 ( AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJz kKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLA Jr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROx VQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLr jyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUD K/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6 H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfd RUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qih ylGa8subX2Nn6UwNR1AkUTV74bU= ) ; KSK, RSASHA256 (2048b), id = 20326 . 172800 IN RRSIG DNSKEY 8 0 172800 20211221000000 ( 20211130000000 20326 . bzGxyBzXDHcqGZwZ3v4L373VyBkgwi9l0Cb0p1OD HCvAa8AgLzJzj7SmksXFpbe3I28TlnigIF/Ggl/w YYmRMtQW8C7XViKSsR110V426t1N+ZO66yegIe31 8yXcg4t3nFcWK1HwwJl0jD5LMaE7Cc99ylyFYe0v I2d66MEq7BAmZDPs/5uDwId+RX47oP+WG06QcDqg x1NE48LebNW5DVnVyzkHvG6KZ1KXTdyRihH085re UqFokixQu3opu8YECy/WXv1mBPbdn0rRK7jWQBgF +3XkHVboVySr0J405H26MnwOflrP7qwIw+QupVop GAsC3O+YdQdrvjKn26k+GA== )
Opět ověříme správnost ZSK pomocí KSK kořenové zóny, jehož parametry jsou již uloženy v DNS resolverech nebo jinak nezávisle distribuovány, a pak už můžeme ověřit celou sekvenci odpovědí až k našemu požadovanému záznamu TXT. Naštěstí toto vše za nás dělají DNSSEC validující DNS resolvery.
Z ukázky je také patrné, že aktuální klíče i podpisy v kořenové zóně jsou oproti klíčům a podpisům v podřazených zónách větší. To je důsledek použití rozdílných algoritmů pro podepisování.
Konfigurace podepisování DNSSEC
Základním režimem podepisování v Knot DNS je předpodepisování zóny, které jsme při úvodním zprovoznění serveru aktivovali ve výchozím nastavení pomocí:
zone: - domain: xdp.cz. ... dnssec-signing: on
Kdybychom chtěli specifikovat parametry podepisování explicitně, bylo by třeba vytvořit sekci policy a na tu se odkázat z nastavení zóny přes dnssec-policy. Příklad s uvedením základních parametrů podepisování s výchozími hodnotami:
policy: - id: default_policy manual: off single-type-signing: off algorithm: ecdsap256sha256 ksk-size: 256 zsk-size: 256 ksk-lifetime: 0 zsk-lifetime: 30d dnskey-ttl: 300 propagation-delay: 1h delete-delay: 0 rrsig-lifetime: 14d rrsig-refresh: 7d rrsig-pre-refresh: 1h zone: - domain: xdp.cz. ... dnssec-signing: on dnssec-policy: default_policy
Pod první konfigurační volbou manual se skrývá ta největší úleva pro operátora serveru. Vypíná manuální, resp. zapíná automatickou správu DNSSEC klíčů. To obnáší generování nových klíčů a jejich řádnou výměnu, což bývá největším problémem při provozování podepsané zóny. Manuální správa klíčů je určena pokročilým uživatelům, kteří potřebují mít celý proces plně pod kontrolou, nebo musí nějak do správy klíčů zasáhnout.
Vypnutím volby single-type-signing vynucujeme použití schématu dvou klíčů KSK a ZSK. Následuje nastavení podepisovacího algoritmu (aktuálně je standardem ECDSAP256SHA256) a velikosti klíčů, jejichž velikost je v tomto případě předurčena algoritmem.
Dalších několik voleb se týká časových parametrů klíčů. Nulová hodnota ksk-lifetime říká, že KSK má neomezenou životnost a nebude automaticky aktualizován. Naproti tomu zsk-lifetime říká, že klíč ZSK se má automaticky vyměnit každých 30 dnů. Hodnota TTL RRsetu DNSKEY je 300 sekund a maximální doba propagace podepsané zóny na všechny koncové servery je jedna hodina. Na nastavení hodnoty propagation-delay závisí správné časování při výměně klíčů!. Parametr delete-delay udává minimální prodlevu, po kterou je starý klíč ponechán v úložišti, než je smazán. To se může hodit pro případ chyby operátora.
Poslední sada parametrů určuje, jak často jsou aktualizovány podpisy RRSIG. Hodnota rrsig-lifetime nastavuje platnost podpisu, která je součástí samotného záznamu. Poslední dvě volby rrsig-refresh a rrsig-prerefresh říkají serveru, v jakém časovém rozpětí před vypršením platnosti podpisu musí být podpis aktualizován. Ve výchozím nastavení se podpisy aktualizují nejpozději 7 dní před jejich expirací, a to v rozmezí jedné hodiny (pokud není přepodepsání vynuceno z jiného důvodu).
Celkově jsou výchozí parametry podepisování poměrně přísné a například životnost ZSK s algoritmem ECDSAP256SHA256 by mohla být mnohem delší. Ale díky automatizaci to není třeba u běžných zón řešit.
Databáze KASP
Informace o klíčích pro DNSSEC ukládá Knot DNS do databáze KASP. Ta je stejně jako dříve popisované databáze (žurnál a konfigurační databáze) založena na LMDB a není určena k přímému přístupu. Většinou je umístěna pod /var/lib/knot/keys. Maximální velikost databáze KASP je omezena parametrem kasp-db-max-size.
Vedle databáze KASP máme ještě úložiště klíčů (tzv. keystore), na něž se odkáže z příslušné policy přes keystore. Podporovány jsou dvě varianty:
- soubory ve formátu PEM v kombinaci s kryptografickou knihovnou GnuTLS – jde o nejčastější použití a výchozí volbu. Soubory soukromých klíčů jsou většinou ukládány v podadresáři keys databáze KASP.
- zařízení s rozhraním PKCS #11 Hardwarový bezpečnostní modul (tzv. HSM) – vyžaduje dostupnost speciálního zařízení nebo softwarový emulátor SoftHSM.
V případě HSM je generování klíčů, výpočet a ověřování podpisů prováděno pomocí tohoto zařízení. Profesionální HSM jsou velmi nákladná a jejich hlavním smyslem je bezpečné uložení klíčů. Na základě praktických zkušeností bychom je však nenazvali kryptoakcelerátory. Při paralelním přístupu neposkytují významný či vůbec uspokojivý výkon. V dalším textu se už budeme výhradně zabývat variantou se soubory PEM.
Pro uživatelský přístup k databázi KASP slouží nástroj keymgr. Při automatické správě klíčů využijeme nejčastěji výpis klíčů. Například pro zónu xdp.cz. vypadá zjednodušený výpis klíčů (od verze 3.2 bude výchozím režimem) s časovými značkami v lidštější nebo ISO podobě:
$ sudo keymgr -b xdp.cz. list human cd4d3e0021bdf4f52a61d4450a0956e401a54137 32114 KSK ECDSAP256SHA256 publish=-2M1D1h9m47s ready=-2M1D1h9m47s 28447ed5682704fb5cb0e5405c48a2af105cc673 17646 ZSK ECDSAP256SHA256 publish=-1D4m47s active=-22h59m47s $ sudo keymgr -b xdp.cz. list iso cd4d3e0021bdf4f52a61d4450a0956e401a54137 32114 KSK ECDSAP256SHA256 publish=2021-10-06T18:13:48Z ready=2021-10-06T18:13:48Z 28447ed5682704fb5cb0e5405c48a2af105cc673 17646 ZSK ECDSAP256SHA256 publish=2021-12-05T19:18:48Z active=2021-12-05T20:23:48Z
Plný výpis klíčů s časovými údaji ve formě unixového času vypadá:
$ sudo keymgr xdp.cz. list 28447ed5682704fb5cb0e5405c48a2af105cc673 ksk=no zsk=yes tag=17646 algorithm=13 size=256 public-only=no pre-active=0 publish=1638731928 ready=0 active=1638735828 retire-active=0 retire=0 post-active=0 revoke=0 remove=0 cd4d3e0021bdf4f52a61d4450a0956e401a54137 ksk=yes zsk=no tag=32114 algorithm=13 size=256 public-only=no pre-active=0 publish=1633544028 ready=1633544028 active=0 retire-active=0 retire=0 post-active=0 revoke=0 remove=0
Vidíme tedy dva klíče, každý se dvěma identifikátory. Interní identifikátor v rámci úložiště (první sloupec ve výpisech) a identifikátor odpovídajícího DNSKEY záznamu (tzv. keytag, druhý sloupec nebo hodnota tag). Většina údajů o klíči jsou časové značky, při nichž dochází ke změně stavu klíče. Ty udávají například, kdy je klíč publikovaný jako DNSKEY záznam, použitý k podepisování nebo odebíraný ze zóny.
A odpovídající soubory PEM se soukromými klíči jsou:
$ sudo ls -1 /var/lib/knot/keys/keys 28447ed5682704fb5cb0e5405c48a2af105cc673.pem cd4d3e0021bdf4f52a61d4450a0956e401a54137.pem
Výměna klíče ZSK
Protože se většina DNS záznamů zdržuje v keších resolverů po dobu TTL, musí výměna klíčů DNSSEC (tzv. rollover) probíhat v několika krocích, aby nedošlo k výpadkům DNS v důsledku nekonzistence mezi obsahem keší resolverů a aktuálním obsahem zóny na autoritativních serverech. ZSK rollover je nejjednodušší a je možné ho provést dvěma způsoby (viz RFC 6781). Knot DNS provádí automatický ZSK rollover pomocí předpublikace nového klíče. Na naší testovací zóně už automatický ZSK rollover pravidelně probíhá. My si ho však pro ukázku přímo teď vynutíme. Aktuální dvojice klíčů je:
$ sudo keymgr -b xdp.cz. list iso cd4d3e0021bdf4f52a61d4450a0956e401a54137 32114 KSK ECDSAP256SHA256 publish=2021-10-06T18:13:48Z ready=2021-10-06T18:13:48Z 28447ed5682704fb5cb0e5405c48a2af105cc673 17646 ZSK ECDSAP256SHA256 publish=2021-12-05T19:18:48Z active=2021-12-05T20:23:48Z
Vidíme jeden aktivní klíč ZSK (17646). Ručně spustíme okamžitý ZSK rollover příkazem:
$ sudo knotc zone-key-rollover xdp.cz. zsk OK
V jednu chvíli může na jedné zóně probíhat pouze jeden rollover klíče nebo algoritmu. Kdyby již nějaký probíhal, provedený příkaz by neměl efekt. V logu démona vidíme:
Dec 07 15:34:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] control, received command 'zone-key-rollover' Dec 07 15:34:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing zone Dec 07 15:34:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, ZSK rollover started Dec 07 15:34:35 ns1.xdp.cz knotd[209149]: notice: [xdp.cz.] DNSSEC, KSK submission, waiting for confirmation Dec 07 15:34:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 32114, algorithm ECDSAP256SHA256, KSK, public, ready, active+ Dec 07 15:34:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 17646, algorithm ECDSAP256SHA256, public, active Dec 07 15:34:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 29957, algorithm ECDSAP256SHA256, public Dec 07 15:34:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing started Dec 07 15:34:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, successfully signed Dec 07 15:34:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, next signing at 2021-12-07T16:39:35+0100
Vygeneroval se nový klíč ZSK (29957) a je ve stavu publikace, tedy je obsažen v DNSKEY RRsetu, ale není používán k podepisování záznamů. Ještě aktuální stav databáze KASP:
$ sudo keymgr -b xdp.cz. list iso cd4d3e0021bdf4f52a61d4450a0956e401a54137 32114 KSK ECDSAP256SHA256 publish=2021-10-06T18:13:48Z ready=2021-10-06T18:13:48Z 28447ed5682704fb5cb0e5405c48a2af105cc673 17646 ZSK ECDSAP256SHA256 publish=2021-12-05T19:18:48Z active=2021-12-05T20:23:48Z efc302f2da45f4022ac3596789cbb959d621be54 29957 ZSK ECDSAP256SHA256 publish=2021-12-07T14:34:35Z
Od okamžiku publikace se musí vyčkat po dobu DNSKEY TTL (5 min) + propagation delay (60 min). Poté následuje další změna:
Dec 07 16:39:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing zone Dec 07 16:39:36 ns1.xdp.cz knotd[209149]: notice: [xdp.cz.] DNSSEC, KSK submission, waiting for confirmation Dec 07 16:39:36 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 32114, algorithm ECDSAP256SHA256, KSK, public, ready, active+ Dec 07 16:39:36 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 17646, algorithm ECDSAP256SHA256, public Dec 07 16:39:36 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 29957, algorithm ECDSAP256SHA256, public, active Dec 07 16:39:36 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing started Dec 07 16:39:36 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, successfully signed Dec 07 16:39:36 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, next signing at 2021-12-07T17:44:35+0100
Starý klíč ZSK (17646) se přestal používat pro podepisování, ale zůstal ještě publikovaný. Novým klíčem ZSK (29957) se již podepisuje zóna. Odpovídající stav databáze KASP:
$ sudo keymgr -b xdp.cz. list iso cd4d3e0021bdf4f52a61d4450a0956e401a54137 32114 KSK ECDSAP256SHA256 publish=2021-10-06T18:13:48Z ready=2021-10-06T18:13:48Z 28447ed5682704fb5cb0e5405c48a2af105cc673 17646 ZSK ECDSAP256SHA256 publish=2021-12-05T19:18:48Z active=2021-12-05T20:23:48Z retire=2021-12-07T15:39:35Z efc302f2da45f4022ac3596789cbb959d621be54 29957 ZSK ECDSAP256SHA256 publish=2021-12-07T14:34:35Z active=2021-12-07T15:39:35Z
Před poslední fází se musí vyčkat po dobu zone maximum TTL (5 min) + propagation-delay (60 min). Pak dojde k odebrání starého ZSK:
Dec 07 17:44:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing zone Dec 07 17:44:35 ns1.xdp.cz knotd[209149]: notice: [xdp.cz.] DNSSEC, KSK submission, waiting for confirmation Dec 07 17:44:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 32114, algorithm ECDSAP256SHA256, KSK, public, ready, active+ Dec 07 17:44:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 29957, algorithm ECDSAP256SHA256, public, active Dec 07 17:44:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing started Dec 07 17:44:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, successfully signed Dec 07 17:44:35 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, next signing at 2021-12-08T14:59:45+0100
A pro úplnost výpis finálního stavu databáze KASP:
$ sudo keymgr -b xdp.cz. list iso cd4d3e0021bdf4f52a61d4450a0956e401a54137 32114 KSK ECDSAP256SHA256 publish=2021-10-06T18:13:48Z ready=2021-10-06T18:13:48Z efc302f2da45f4022ac3596789cbb959d621be54 29957 ZSK ECDSAP256SHA256 publish=2021-12-07T14:34:35Z active=2021-12-07T15:39:35Z
Ještě dodejme, že hodnota maximálního TTL záznamů v zóně se zjišťujě automaticky, pokud není explicitně nastavena volbou zone-max-ttl.
Výměna klíče KSK
KSK rollover je o něco složitější, protože vyžaduje aktualizaci DS záznamu v nadřazené zóně. S tímto úkonem souvisí i několikrát vypsaná hláška v logu:
Dec 07 17:44:35 ns1.xdp.cz knotd[209149]: notice: [xdp.cz.] DNSSEC, KSK submission, waiting for confirmation
Když jsme zapnuli podepisování DNSSEC a nastavili příslušný DS záznam v rozhraní registrátora, neinformovali jsme démona o dokončeném zprovoznění klíče KSK a to by nám bránilo v jeho výměně. Zpětně tedy dokončíme nasazení prvotního klíče příkazem:
$ sudo knotc zone-ksk-submitted xdp.cz.
Abychom se o tento krok nemuseli více starat, nastavíme automatickou detekci aktualizace DS záznamu. Tato detekce není ve výchozím stavu zapnutá, neboť klíč KSK má neomezenou platnost a je na rozhodnutí uživatele, jaké servery k detekci použije. Může jít o autoritativní servery nadřazené zóny, resolvery nebo jejich libovolnou kombinaci. My se spokojíme se dvěma veřejnými validujícími resolvery. Přidáme do konfigurace jejich popis v sekci remote a odkážeme se na ně z nové definice v sekci submission, kde dále nastavíme interval kontrol na 30 minut:
remote: - id: cznic address: [2001:148f:ffff::1, 2001:148f:fffe::1] - id: cloudflare address: [2606:4700:4700::1111, 2606:4700:4700::1001] submission: - id: submission_30m check-interval: 30m parent: [cznic, cloudflare]
Vytvoříme si už vlastní nastavení podepisování, kde kromě sledování záznamu DS ještě nastavíme pozdržené mazání klíčů na dva dny:
policy: - id: main_policy delete-delay: 2d ksk-submission: submission_30m zone: - domain: xdp.cz. ... dnssec-signing: on dnssec-policy: main_policy
A načteme upravenou konfiguraci sudo systemctl reload knot.
Knot DNS provádí automatický KSK rollover pomocí dvou podpisů RRsetu DNSKEY (viz RFC 6781). My si teď tento rollover vynutíme příkazem:
$ sudo knotc zone-key-rollover xdp.cz. ksk OK
V logu vidíme nově vygenerovaný klíč KSK (40920), který je publikovaný a používá se, vedle stávajícího KSK klíče (32114), k podepisování RRsetu DNSKEY:
Dec 07 18:29:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] control, received command 'zone-key-rollover' Dec 07 18:29:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing zone Dec 07 18:29:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, KSK rollover started Dec 07 18:29:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 32114, algorithm ECDSAP256SHA256, KSK, public, active Dec 07 18:29:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 29957, algorithm ECDSAP256SHA256, public, active Dec 07 18:29:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 40920, algorithm ECDSAP256SHA256, KSK, public, active+ Dec 07 18:29:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing started Dec 07 18:29:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, successfully signed Dec 07 18:29:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, next signing at 2021-12-07T19:34:20+0100
Aktuální stav databáze KASP:
$ sudo keymgr -b xdp.cz. list iso cd4d3e0021bdf4f52a61d4450a0956e401a54137 32114 KSK ECDSAP256SHA256 publish=2021-10-06T18:13:48Z ready=2021-10-06T18:13:48Z active=2021-12-07T17:22:09Z efc302f2da45f4022ac3596789cbb959d621be54 29957 ZSK ECDSAP256SHA256 publish=2021-12-07T14:34:35Z active=2021-12-07T15:39:35Z 057230e5df7ebc95b27285f1a7a9567eebd8ec3a 40920 KSK ECDSAP256SHA256 publish=2021-12-07T17:29:20Z
Dotazem se přesvědčíme, že popsaný stav odpovídá skutečnosti (2 klíče KSK, 1 klíč ZSK a 2 podpisy):
$ kdig @ns1.xdp.cz xdp.cz. dnskey +dnssec +multiline +noquestion +noopt +nostats +nocrypto ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 42593 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 5; AUTHORITY: 0; ADDITIONAL: 1 ;; ANSWER SECTION: xdp.cz. 300 IN DNSKEY 256 3 13 [omitted] ; ZSK, ECDSAP256SHA256 (256b), id = 29957 xdp.cz. 300 IN DNSKEY 257 3 13 [omitted] ; KSK, ECDSAP256SHA256 (256b), id = 32114 xdp.cz. 300 IN DNSKEY 257 3 13 [omitted] ; KSK, ECDSAP256SHA256 (256b), id = 40920 xdp.cz. 300 IN RRSIG DNSKEY 13 2 300 20211221172920 ( 20211207155920 32114 xdp.cz. [omitted] ) xdp.cz. 300 IN RRSIG DNSKEY 13 2 300 20211221172920 ( 20211207155920 40920 xdp.cz. [omitted] )
Nyní se čeká po dobu DNSKEY TTL (5 min) + propagation-delay (60 min) než se nový klíč KSK přepne do nám již známého stavu ready:
Dec 07 19:34:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing zone Dec 07 19:34:20 ns1.xdp.cz knotd[209149]: notice: [xdp.cz.] DNSSEC, KSK submission, waiting for confirmation Dec 07 19:34:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 32114, algorithm ECDSAP256SHA256, KSK, public, active Dec 07 19:34:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 29957, algorithm ECDSAP256SHA256, public, active Dec 07 19:34:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 40920, algorithm ECDSAP256SHA256, KSK, public, ready, active+ Dec 07 19:34:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing started Dec 07 19:34:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, successfully signed Dec 07 19:34:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, next signing at 2021-12-14T16:39:35+0100 Dec 07 19:34:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DS check, outgoing, remote 2001:148f:ffff::1@53, KSK submission check: negative
Ještě obsah databáze KASP:
$ sudo keymgr -b xdp.cz. list iso cd4d3e0021bdf4f52a61d4450a0956e401a54137 32114 KSK ECDSAP256SHA256 publish=2021-10-06T18:13:48Z ready=2021-10-06T18:13:48Z active=2021-12-07T17:22:09Z efc302f2da45f4022ac3596789cbb959d621be54 29957 ZSK ECDSAP256SHA256 publish=2021-12-07T14:34:35Z active=2021-12-07T15:39:35Z 057230e5df7ebc95b27285f1a7a9567eebd8ec3a 40920 KSK ECDSAP256SHA256 publish=2021-12-07T17:29:20Z ready=2021-12-07T18:34:20Z
V tuto chvíli se navíc publikovaly záznamy typu CDNSKEY a CDS. Syntakticky jsou stejné jako záznam DNSKEY pro nový klíč KSK a jeho otisk DS, ale jejich přítomností informujeme nadřazenou zónu, pokud to podporuje (viz hezký přehled registrů), že bychom v ní chtěli aktualizovat náš DS záznam. Přesvědčíme se o existenci těchto záznamů:
$ kdig @ns1.xdp.cz xdp.cz cdnskey +dnssec +multiline +noquestion +noopt +nostats +nocrypto ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 49048 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 3; AUTHORITY: 0; ADDITIONAL: 1 ;; ANSWER SECTION: xdp.cz. 0 IN CDNSKEY 257 3 13 [omitted] ; KSK, ECDSAP256SHA256 (256b), id = 40920 xdp.cz. 0 IN RRSIG CDNSKEY 13 2 0 20211221183420 ( 20211207170420 32114 xdp.cz. [omitted] ) xdp.cz. 0 IN RRSIG CDNSKEY 13 2 0 20211221183420 ( 20211207170420 40920 xdp.cz. [omitted] )
$ kdig @ns1.xdp.cz xdp.cz cds +dnssec +multiline +noquestion +noopt +nostats +nocrypto ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 63143 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 3; AUTHORITY: 0; ADDITIONAL: 1 ;; ANSWER SECTION: xdp.cz. 0 IN CDS 40920 13 2 ( 70959CF5D6A0A3F53BD0AE42DF4DA6ADE84DA066 AE1F95F6B6B610DA53F6E86A ) xdp.cz. 0 IN RRSIG CDS 13 2 0 20211221183420 ( 20211207170420 32114 xdp.cz. [omitted] ) xdp.cz. 0 IN RRSIG CDS 13 2 0 20211221183420 ( 20211207170420 40920 xdp.cz. [omitted] )
V této fázi musíme vyčkat, než si nadřazená zóna (cz.) zdetekuje naší změnu a aktualizuje se. Výpisem naplánovaných událostí nad zónou si můžeme zobrazit stav detekce aktualizace záznamu DS:
$ sudo knotc zone-status xdp.cz. +events [xdp.cz.] load: not scheduled | refresh: not scheduled | update: not scheduled | expiration: not scheduled | journal flush: not scheduled | backup/restore: not scheduled | notify: not scheduled | DNSSEC re-sign: +6D20h53m5s | NSEC3 resalt: not scheduled | DS check: +19m41s | DS push: not scheduled
Vidíme, že nejbližší událost DS check se provede za necelých 20 minut. Jednotlivé pokusy najdeme v logu až do úspěšného zdetekování na obou resolverech:
Dec 07 20:04:20 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DS check, outgoing, remote 2001:148f:ffff::1@53, KSK submission check: negative ... Dec 08 15:34:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DS check, outgoing, remote 2001:148f:ffff::1@53, KSK submission check: negative Dec 08 16:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DS check, outgoing, remote 2001:148f:ffff::1@53, KSK submission check: positive Dec 08 16:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DS check, outgoing, remote 2606:4700:4700::1111@53, KSK submission check: positive Dec 08 16:04:21 ns1.xdp.cz knotd[209149]: notice: [xdp.cz.] DNSSEC, KSK submission, confirmed Dec 08 16:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing zone Dec 08 16:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 32114, algorithm ECDSAP256SHA256, KSK, public, active+ Dec 08 16:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 29957, algorithm ECDSAP256SHA256, public, active Dec 08 16:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 40920, algorithm ECDSAP256SHA256, KSK, public, active Dec 08 16:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing started Dec 08 16:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, successfully signed Dec 08 16:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, next signing at 2021-12-08T17:04:21+0100
Protože se podařilo ověřit, že nadřazená zóna obsahuje nový záznam DS, ze zóny byly odstraněny záznamy CDNSKEY a CDS. Toto chování lze ovlivnit volbou cds-cdnskey-publish. Aktuální obsah databáze KASP:
$ sudo keymgr -b xdp.cz. list iso cd4d3e0021bdf4f52a61d4450a0956e401a54137 32114 KSK ECDSAP256SHA256 publish=2021-10-06T18:13:48Z ready=2021-10-06T18:13:48Z active=2021-12-07T17:22:09Z retire-active=2021-12-08T15:04:21Z remove=2021-12-08T16:04:21Z efc302f2da45f4022ac3596789cbb959d621be54 29957 ZSK ECDSAP256SHA256 publish=2021-12-07T14:34:35Z active=2021-12-07T15:39:35Z 057230e5df7ebc95b27285f1a7a9567eebd8ec3a 40920 KSK ECDSAP256SHA256 publish=2021-12-07T17:29:20Z ready=2021-12-07T18:34:20Z active=2021-12-08T15:04:21Z
Starý klíč KSK (32114) je však stále ještě publikovaný a používaný k podepisování dokud není jistota, že starý záznam DS expiroval v keších resolverů:
$ kdig @ns1.xdp.cz xdp.cz dnskey +dnssec +multiline +noquestion +noopt +nostats +nocrypto ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 22011 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 5; AUTHORITY: 0; ADDITIONAL: 1 ;; ANSWER SECTION: xdp.cz. 300 IN DNSKEY 256 3 13 [omitted] ; ZSK, ECDSAP256SHA256 (256b), id = 29957 xdp.cz. 300 IN DNSKEY 257 3 13 [omitted] ; KSK, ECDSAP256SHA256 (256b), id = 32114 xdp.cz. 300 IN DNSKEY 257 3 13 [omitted] ; KSK, ECDSAP256SHA256 (256b), id = 40920 xdp.cz. 300 IN RRSIG DNSKEY 13 2 300 20211221172920 ( 20211207155920 32114 xdp.cz. [omitted] ) xdp.cz. 300 IN RRSIG DNSKEY 13 2 300 20211221172920 ( 20211207155920 40920 xdp.cz. [omitted] )
Po vyčkání po dobu parent DS TTL (60 min) dojde k dokončení KSK rolloveru:
Dec 08 17:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing zone Dec 08 17:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 32114, algorithm ECDSAP256SHA256, KSK Dec 08 17:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 29957, algorithm ECDSAP256SHA256, public, active Dec 08 17:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, key, tag 40920, algorithm ECDSAP256SHA256, KSK, public, active Dec 08 17:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, signing started Dec 08 17:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, successfully signed Dec 08 17:04:21 ns1.xdp.cz knotd[209149]: info: [xdp.cz.] DNSSEC, next signing at 2021-12-14T16:39:35+0100
Ve výsledném obsahu databáze KASP je vidět ještě starý klíč KSK, který je v „karanténě“ po dobu dvou dnů před jeho finálním odstraněním z úložiště klíčů:
$ sudo keymgr -b xdp.cz. list iso cd4d3e0021bdf4f52a61d4450a0956e401a54137 32114 KSK ECDSAP256SHA256 publish=2021-10-06T18:13:48Z ready=2021-10-06T18:13:48Z active=2021-12-07T17:22:09Z retire-active=2021-12-08T15:04:21Z remove=2021-12-08T16:04:21Z efc302f2da45f4022ac3596789cbb959d621be54 29957 ZSK ECDSAP256SHA256 publish=2021-12-07T14:34:35Z active=2021-12-07T15:39:35Z 057230e5df7ebc95b27285f1a7a9567eebd8ec3a 40920 KSK ECDSAP256SHA256 publish=2021-12-07T17:29:20Z ready=2021-12-07T18:34:20Z active=2021-12-08T15:04:21Z
A dotázáním primárního serveru si zobrazíme aktuální RRset DNSKEY:
$ kdig @ns1.xdp.cz xdp.cz dnskey +dnssec +multiline +noquestion +noopt +nostats +nocrypto ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 18746 ;; Flags: qr aa rd; QUERY: 1; ANSWER: 3; AUTHORITY: 0; ADDITIONAL: 1 ;; ANSWER SECTION: xdp.cz. 300 IN DNSKEY 256 3 13 [omitted] ; ZSK, ECDSAP256SHA256 (256b), id = 29957 xdp.cz. 300 IN DNSKEY 257 3 13 [omitted] ; KSK, ECDSAP256SHA256 (256b), id = 40920 xdp.cz. 300 IN RRSIG DNSKEY 13 2 300 20211222160421 ( 20211208143421 40920 xdp.cz. [omitted] )
V příštím díle se podíváme ještě na některé další funkce související s DNSSEC.