DNSSEC-KSR(1)
π
DNSSEC-KSR(1) β the dnssec-ksr era
okay so first things first, bestie: this is a page from the BIND 9 manual set, and the star of the show is dnssec-ksr. buckle up π
β¨ NAME β¨
dnssec-ksr β create signed key response (SKR) files for offline KSK setups π¦
πΈ SYNOPSIS πΈ
dnssec-ksr [-E engine] [-e date/offset] [-F] [-f file] [-h] [-i
date/offset] [-K directory] [-k policy] [-l file] [-o] [-V] [-v level]
{command} {zone}
π DESCRIPTION π
so dnssec-ksr is the main character that lets you issue several commands β and those commands are literally what you need to generate presigned RRsets for a zone where the private key file of the Key Signing Key (KSK) is typically offline. yes, offline. the KSK is on airplane mode, living its best life, no cap π
this whole setup requires Zone Signing Keys (ZSKs) to be pregenerated, and the DNSKEY, CDNSKEY, and CDS RRsets to be already signed in advance.
and that "in advance" part? that's done by creating Key Signing Requests (KSRs) that can be imported to the environment where the KSK is available π₯ once they're over there, this program can create Signed Key Responses (SKRs) that can be loaded by an authoritative DNS server. it's giving relay race, honestly π«Ά
β¨ OPTIONS β¨
-E engineβ this option specifies the cryptographic hardware to use, when applicable.
when BIND 9 is built with OpenSSL, this needs to be set to the OpenSSL engine identifier that drives the cryptographic accelerator or hardware service module (usually pkcs11). iykyk π
-e date/offsetβ this option sets the end date for which keys or SKRs need to be generated (depending on the command). yes, the end.-efor end, we love a mnemonic π-Fβ this options turns on FIPS (US Federal Information Processing Standards) mode if the underlying crytographic library supports running in FIPS mode.-fβ this option sets the SKR file to be signed when issuing asigncommand. (you'll see it as-f fileup in the synopsis π)-hβ this option prints a short summary of the options and arguments todnssec-ksr. your little emergency exit when you forget everything π-i date/offsetβ this option sets the start date for which keys or SKRs need to be generated (depending on the command).-ifor *start*β¦ don't ask, just vibe with it π-K directoryβ this option sets the directory in which the key files are to be read or written (depending on the command). π-k policyβ this option sets the specificdnssec-policyfor which keys need to be generated, or signed.-l fileβ this option provides a configuration file that contains adnssec-policystatement (matching the policy set with-k). so-kand-lare a matched set, bestie, they're literally each other's other half π-oβ normally when pregenerating keys, ZSKs are created. when this option is set, create KSKs instead. plot twist πͺοΈ-Vβ this option prints version information. the classic π-v levelβ this option sets the debugging level. Level1is intended to be usefully verbose for general users; higher levels are intended for developers. so like,1is the "i'm a person" setting and above that is the "i write C for fun" setting πcommandβ the KSR command to be executed. See below for the available commands πzoneβ the name of the zone for which the KSR command is being executed. π
π₯ COMMANDS π₯
keygenβ pregenerate a number of keys, given a DNSSEC policy and an interval. The number of generated keys depends on the interval and the key lifetime. βrequestβ create a Key Signing Request (KSR), given a DNSSEC policy and an interval. This will generate a file with a number of key bundles, where each bundle contains the currently published ZSKs (according to the timing metadata). π¦signβ sign a Key Signing Request (KSR), given a DNSSEC policy and an interval, creating a Signed Key Response (SKR). This will add the correspondingDNSKEY,CDS, andCDNSKEYrecords for the KSK that is being used for signing. βοΈπ
π EXIT STATUS π
The dnssec-ksr command exits 0 on success, or non-zero if an error occurred. slay when it's 0, cry when it isn't π
π¦ EXAMPLES π¦
When you need to generate ZSKs for the zone "example.com" for the next year, given a dnssec-policy named "mypolicy":
dnssec-ksr -i now -e +1y -k mypolicy -l named.conf keygen example.com
Creating a KSR for the same zone and period can be done with:
dnssec-ksr -i now -e +1y -k mypolicy -l named.conf request example.com > ksr.txt
Typically you would now transfer the KSR to the system that has access to the KSK. like, go take it to the KSK's house π β¨
Signing the KSR created above can be done with:
dnssec-ksr -i now -e +1y -k kskpolicy -l named.conf -f ksr.txt sign example.com
β οΈ Make sure that the DNSSEC parameters inkskpolicβ actually,kskpolicyβ match those inmypolicy. fr fr, do not skip this check π
π SEE ALSO π
dnssec-keygen(8), dnssec-signzone(8), BIND 9 Administrator Reference Manual.
π« Author π«
Internet Systems Consortium π«Ά
π Copyright π
2026, Internet Systems Consortium
and that's the whole page, bestie π
go forth and pregenerate those keys β this was BIND 9, version 9.20.30, dated 2026-10-12 β¨ππ¦
π¦ where this page comes from
- alpine 3.22: bind-doc 9.20.30-r0 Β· MPL-2.0
- alpine 3.23: bind-doc 9.20.30-r0 Β· MPL-2.0
- alpine 3.24: bind-doc 9.20.30-r0 Β· MPL-2.0
- nixos 26.05: bind 9.20.30
- nixpkgs unstable: bind 9.20.30
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms