Première rédaction de cet article le 2 novembre 2025
J'ai déjà parlé de Cascade, un logiciel actuellement en développement, qui automatise un certain nombre de tâches nécessaires pour DNSSEC, comme la re-signature ou le remplacement des clés. Le projet avance vite donc voyons quelques nouveaux essais.
D'abord, puisque Cascade tire son nom du traitement en plusieurs étapes d'une tâche, avec la possibilité d'insérer des validations à chaque étape, essayons la validation manuelle (j'ai déjà montré la validation automatique dans mon précédent article). Comme pour la validation automatique, vous pouvez valider la zone avant la signature et/ou après. Comme pour la validation automatique, vous devez indiquer, dans le fichier qui décrit une politique de gestion, que des examens (review) sont obligatoires :
% cat /etc/cascade/policies/default.toml … [loader.review] required = true … [signer.review] required = true …
Par contre, et contrairement à ce qui se passe pour la validation
automatique, vous n'indiquez pas de programme à
exécuter (hook). Cela signifiera, pour Cascade,
qu'il faut une validation manuelle. Vous rechargez alors les
politiques (cascade policy reload) et (c'est
une bogue de la version de développement), vous redémarrez le
serveur. Lorsqu'une nouvelle version d'une zone est prête, et que
vous l'indiquez au serveur (cascade zone reload
example.org), vous voyez ceci :
% cascade zone status example.org Status report for zone 'example.org' using policy 'default' ✔ Waited for a new version of the example.org zone ✔ Loaded version 2025102700 Loaded at 2025-10-27T08:47:38+00:00 (13s ago) Loaded 243 B and 4 records from the filesystem in 0 seconds • Waiting for approval to sign version 2025102700 ! Zone will be held until manually approved Approve with: cascade zone approve --unsigned example.org 2025102700 Reject with: cascade zone reject --unsigned example.org 2025102700
La zone n'est pas encore signée, vous devez la
valider. (Rappelez-vous qu'on peut imposer une validation de la zone
non signée, de la zone signée, ou bien des deux.) Et Cascade vous
indique comment faire, mais pas comment récupérer la zone à
signer. Pour cela, le plus simple est un transfert de zones (RFC 5936) depuis le serveur indiqué par les
directives .servers dans la configuration de Cascade.
% cat /etc/cascade/config.toml … [loader] review.servers = ["127.0.0.1:4541", "[::1]:4541"] [signer] review.servers = ["127.0.0.1:4542", "[::1]:4542"] … % dig @127.0.0.1 -p 4541 example.org AXFR …
On peut alors examiner la zone. Mettons qu'elle nous satisfasse. On
va alors suivre les instructions qu'affichait cascade zone
status :
% cascade zone approve --unsigned example.org 2025102700 Approved unsigned zone 'example.org' with serial number 2025102700
Personnellement, je ne vois pas trop l'intérêt d'examiner manuellement la zone non signée (on pourrait aussi examiner le fichier de zone qu'on a donné à Cascade) et je vais plutôt regarder la zone signée, qui est servie sur un autre port.
Autre activité, Cascade permet également d'automatiser une opération délicate : le remplacement des clés. Cette opération est nécessaire si on découvre qu'une clé privée a été compromise. Et on peut aussi estimer que le remplacement est utile, même en l'absence de compromission, pour pratiquer les procédures et vérifier que tout se passera bien lorsqu'on aura vraiment besoin d'un remplacement. Supposons une politique avec deux clés, la KSK (Key Signing Key, qui ne signe que les clés) et la ZSK (Zone Signing Key, qui signe le reste). D'abord, l'état initial :
% dig +multi +dnssec internautique.fr DNSKEY … ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30159 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 … ;; ANSWER SECTION: internautique.fr. 3600 IN DNSKEY 257 3 15 ( IDypc2j/kbE3iHtnbry715I6jwgVEPMLz1+QV9GNgMA= ) ; KSK; alg = ED25519 ; key id = 33113 internautique.fr. 3600 IN DNSKEY 256 3 15 ( K+sBrJFESzsLwD6AFGW+zZrydRjk5QRtbshG4AKV/jI= ) ; ZSK; alg = ED25519 ; key id = 56167 internautique.fr. 3600 IN RRSIG DNSKEY 15 2 3600 ( 20251109195246 20251025195246 33113 internautique.fr. ARucHmrIB8ivtduHEzphj2SJEGRZ7BlP5c7686dD2DTy TDJpZc9Rcerrh5okki3rKKOsFMqOwXunlNl+cgGcBA== ) … ;; WHEN: Mon Oct 27 09:06:13 CET 2025
Nous avons dans le DNS la KSK, d'identification 33113, et la ZSK, d'identification 56167. C'est aussi ce que nous dit Cascade :
% cascade zone status --detailed internautique.fr
…
✔ Published version 2025102612
Published zone available on 127.0.0.1:8053
DNSSEC keys:
ZSK tagged 56167:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+56167.key
Actively used for signing
KSK tagged 33113:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+33113.key
Actively used for signing
Details:
key file:///var/db/cascade/keys/Kinternautique.fr.+015+56167.key expires at 2025-11-02T14:51:53Z
key file:///var/db/cascade/keys/Kinternautique.fr.+015+33113.key expires at 2025-12-26T14:51:53Z
Et c'est aussi ce qu'on peut voir avec DNSviz. Maintenant, commençons le remplacement de la ZSK :
% cascade keyset internautique.fr zsk start-roll Manual key roll for internautique.fr successful
Et voici le résultat, une nouvelle ZSK est apparue, la 30906 :
% cascade zone status --detailed internautique.fr
Status report for zone 'internautique.fr' using policy 'default'
✔ Waited for a new version of the internautique.fr zone
✔ Loaded version 2025101721
Loaded at 2025-10-26T14:51:53+00:00 (17h 16m 7s ago)
Loaded 333 B and 7 records from the filesystem in 0 seconds
✔ Waited for approval to sign version 2025101721
✔ Approval received to sign version 2025101721, signing requested
✔ Signed version 2025101721 as version 2025102701
Signing requested at 2025-10-27T08:07:36+00:00 (24s ago)
Signing started at 2025-10-27T08:07:36+00:00 (24s ago)
Signing finished at 2025-10-27T08:07:36+00:00 (24s ago)
Collected 8 records in 0s, sorted in 0s
Generated 6 NSEC(3) records in 0s
Generated 8 signatures in 0s (8 sig/s)
Inserted signatures in 0s (8 sig/s)
Took 0s in total, using 1 threads
Current action: Finished
✔ Waited for approval to publish version 2025102701
✔ Published version 2025102701
Published zone available on 127.0.0.1:8053
DNSSEC keys:
KSK tagged 33113:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+33113.key
Actively used for signing
ZSK tagged 30906:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+30906.key
ZSK tagged 56167:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+56167.key
Actively used for signing
Details:
ZskRoll: CacheExpire1(3600)
Wait until 2025-10-27T09:07:36Z to let caches expire
For the next step run:
cascade keyset internautique.fr zsk cache-expired1
automation is enabled for this step.
key file:///var/db/cascade/keys/Kinternautique.fr.+015+33113.key expires at 2025-12-26T14:51:53Z
key file:///var/db/cascade/keys/Kinternautique.fr.+015+30906.key expires at 2025-11-03T08:07:27Z
key file:///var/db/cascade/keys/Kinternautique.fr.+015+56167.key expires at 2025-11-02T14:51:53Z
À la fin, c'est bon, le remplacement s'est fait sans autre intervention, et en respectant les durées nécessaires pour que, à tout moment, tous les résolveurs DNS de la planète aient un chemin de validation complet, depuis la racine :
% cascade zone status --detailed internautique.fr
Status report for zone 'internautique.fr' using policy 'default'
✔ Waited for a new version of the internautique.fr zone
✔ Loaded version 2025101721
Loaded at 2025-10-26T14:51:53+00:00 (23h 45m 37s ago)
Loaded 333 B and 7 records from the filesystem in 0 seconds
✔ Waited for approval to sign version 2025101721
✔ Approval received to sign version 2025101721, signing requested
✔ Signed version 2025101721 as version 2025102705
Signing requested at 2025-10-27T12:07:56+00:00 (2h 29m 34s ago)
Signing started at 2025-10-27T12:07:56+00:00 (2h 29m 34s ago)
Signing finished at 2025-10-27T12:07:56+00:00 (2h 29m 34s ago)
Collected 8 records in 0s, sorted in 0s
Generated 5 NSEC(3) records in 0s
Generated 8 signatures in 0s (8 sig/s)
Inserted signatures in 0s (8 sig/s)
Took 0s in total, using 1 threads
Current action: Finished
✔ Waited for approval to publish version 2025102705
✔ Published version 2025102705
Published zone available on 127.0.0.1:8053
DNSSEC keys:
KSK tagged 33113:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+33113.key
Actively used for signing
ZSK tagged 30906:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+30906.key
Actively used for signing
Details:
key file:///var/db/cascade/keys/Kinternautique.fr.+015+30906.key expires at 2025-11-03T08:07:27Z
key file:///var/db/cascade/keys/Kinternautique.fr.+015+33113.key expires at 2025-12-26T14:51:53Z
Vous pouvez admirer l'état final dans DNSviz.
Maintenant, remplaçons la KSK. C'est un peu plus délicat car il y
a une opération manuelle à faire, auprès de la zone parente
(.fr dans notre
cas).
On voit l'état initial sur DNSviz. Démarrons l'opération :
% cascade keyset internautique.fr ksk start-roll
Manual key roll for internautique.fr successful
% cascade zone status --detailed internautique.fr
Status report for zone 'internautique.fr' using policy 'default'
✔ Waited for a new version of the internautique.fr zone
✔ Loaded version 2025101721
Loaded at 2025-10-26T14:51:53+00:00 (1day 19h 29m 50s ago)
Loaded 333 B and 7 records from the filesystem in 0 seconds
✔ Waited for approval to sign version 2025101721
✔ Approval received to sign version 2025101721, signing requested
✔ Signed version 2025101721 as version 2025102801
Signing requested at 2025-10-28T10:21:36+00:00 (7s ago)
Signing started at 2025-10-28T10:21:36+00:00 (7s ago)
Signing finished at 2025-10-28T10:21:36+00:00 (7s ago)
Collected 8 records in 0s, sorted in 0s
Generated 7 NSEC(3) records in 0s
Generated 8 signatures in 0s (8 sig/s)
Inserted signatures in 0s (8 sig/s)
Took 0s in total, using 1 threads
Current action: Finished
✔ Waited for approval to publish version 2025102801
✔ Published version 2025102801
Published zone available on 127.0.0.1:8053
DNSSEC keys:
KSK tagged 49915:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+49915.key
Actively used for signing
ZSK tagged 30906:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+30906.key
Actively used for signing
KSK tagged 33113:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+33113.key
Actively used for signing
Details:
KskRoll: CacheExpire1(3600)
Wait until 2025-10-28T11:21:36Z to let caches expire
For the next step run:
cascade keyset internautique.fr ksk cache-expired1
automation is enabled for this step.
key file:///var/db/cascade/keys/Kinternautique.fr.+015+49915.key expires at 2025-12-28T10:21:27Z
key file:///var/db/cascade/keys/Kinternautique.fr.+015+33113.key expires at 2025-12-26T14:51:53Z
key file:///var/db/cascade/keys/Kinternautique.fr.+015+30906.key expires at 2025-11-03T08:07:27Z
La nouvelle KSK, la 49915, est publiée. Une fois le temps nécessaire écoulé (toujours cette histoire de la mémorisation, par les résolveurs, des données), Cascade nous dit qu'il faut maintenant changer la DS :
% cascade zone status --detailed internautique.fr
Status report for zone 'internautique.fr' using policy 'default'
✔ Waited for a new version of the internautique.fr zone
✔ Loaded version 2025101721
Loaded at 2025-10-26T14:51:53+00:00 (1day 23h 59m 24s ago)
Loaded 333 B and 7 records from the filesystem in 0 seconds
✔ Waited for approval to sign version 2025101721
✔ Approval received to sign version 2025101721, signing requested
✔ Signed version 2025101721 as version 2025102806
Signing requested at 2025-10-28T14:22:01+00:00 (29m 15s ago)
Signing started at 2025-10-28T14:22:01+00:00 (29m 15s ago)
Signing finished at 2025-10-28T14:22:01+00:00 (29m 15s ago)
Collected 8 records in 0s, sorted in 0s
Generated 7 NSEC(3) records in 0s
Generated 8 signatures in 0s (8 sig/s)
Inserted signatures in 0s (8 sig/s)
Took 0s in total, using 1 threads
Current action: Finished
✔ Waited for approval to publish version 2025102806
✔ Published version 2025102806
Published zone available on 127.0.0.1:8053
DNSSEC keys:
KSK tagged 33113:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+33113.key
Actively used for signing
KSK tagged 49915:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+49915.key
Actively used for signing
ZSK tagged 30906:
Reference: file:///var/db/cascade/keys/Kinternautique.fr.+015+30906.key
Actively used for signing
Details:
KskRoll: Propagation2
Check that all nameservers of the parent zone have the following RRset (or equivalent):
internautique.fr. 3600 IN DS 49915 15 2 0ADF31249F82B92BC7A8068CB2D6117C35F78E5994F1AFF7BCFE6999A71F5091
For the next step run:
cascade keyset internautique.fr ksk propagation2-complete <ttl>
automation is enabled for this step.
Automatic key roll state:
Roll KskRoll, state Propagation2:
Wait until the new DS RRset has propagated to all nameservers
of the parent zone. Try again after 2025-10-28T15:22:01Z
key file:///var/db/cascade/keys/Kinternautique.fr.+015+30906.key expires at 2025-11-03T08:07:27Z
key file:///var/db/cascade/keys/Kinternautique.fr.+015+33113.key expires at 2025-12-26T14:51:53Z
key file:///var/db/cascade/keys/Kinternautique.fr.+015+49915.key expires at 2025-12-28T10:21:27Z
Vous avez vu, à la fin ? Il faut placer la DS
internautique.fr. 3600 IN DS 49915 15 2
0ADF31249F82B92BC7A8068CB2D6117C35F78E5994F1AFF7BCFE6999A71F5091
dans la zone parente, ce qui se fait typiquement via l'interface
(Web ou API) de son BE.
Ce sera la seule opération manuelle qu'il faudra faire.
L'ancienne KSK sera supprimée automatiquement en temps utile. (Ici, la 33113 est encore présente, et les clés seront signées avec les deux KSK.)
Dans l'opération précédente, on avait deux clés, la KSK et la ZSK. C'est la configuration la plus courante. Mais elle n'est pas obligatoire. Elle avait été promue à une époque car elle résolvait un problème spécifique à l'algorithme de cryptographie RSA : ce dernier laissait le choix entre des clés courtes, compactes et rapides mais peu sûres, et des clés longues, dont les avantages et inconvénients étaient à l'opposé. Avec RSA, avoir une ZSK courte et changée souvent, ainsi qu'une KSK longue et changée plus rarement, était logique. Mais avec les algorithmes comme ceux fondés sur des courbes elliptiques, ce n'est plus utile. Autant n'avoir qu'une clé, qu'on nomme souvent CSK, pour Common Signing Key. Dans Cascade, cela se configure dans la politique (rappelez-vous que vous pouvez avoir plusieurs politiques, donc qu'une même instance de Cascade peut gérer des zones avec CSK et des zones avec KSK/ZSK) :
% cat /etc/cascade/policies/one-key.toml … use-csk = true
Et voici ce qu'affiche Cascade :
% cascade zone status --detailed cours-dns.fr
Status report for zone 'cours-dns.fr' using policy 'one-key'
✔ Waited for a new version of the cours-dns.fr zone
✔ Loaded <serial number not yet known>
Loaded at 2025-10-31T13:23:23+00:00 (1day 5h 36m 3s ago)
Loaded 261 B and 5 records from the filesystem in 0 seconds
✔ Waited for approval to sign <serial number not yet known>
• Approval received to sign <serial number not yet known>, signing requested
DNSSEC keys:
CSK tagged 50973:
Reference: file:///var/db/cascade/keys/Kcours-dns.fr.+015+50973.key
Actively used for signing
Details:
key file:///var/db/cascade/keys/Kcours-dns.fr.+015+50973.key expires at 2026-10-30T13:01:19Z
Et vous pouvez voir graphiquement la clé unique avec DNSviz.
Allez, un autre point, la technique utilisée pour indiquer les noms absents. DNSSEC en permet deux, les NSEC du RFC 4034 et les NSEC3 du RFC 5155. Cascade permet de configurer l'un ou l'autre dans la politique :
type = "nsec" # type = "nsec3"
Ah, et une nouveauté relativement récente de Cascade, un moyen simple de tester si le démon tourne bien :
% cascade health Ok
Ce qui est très pratique dans une supervision automatisée :
% sudo -u nagios /usr/local/lib/nagios/plugins/check_cascade Cascade OK
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)