cds-digest-types { 2; };\n\
dnskey-ttl " DNS_KASP_KEY_TTL ";\n\
inline-signing yes;\n\
+ manual-mode no;\n\
offline-ksk no;\n\
publish-safety " DNS_KASP_PUBLISH_SAFETY "; \n\
retire-safety " DNS_KASP_RETIRE_SAFETY "; \n\
max-zone-ttl 0; \n\
keys { };\n\
inline-signing yes;\n\
+ manual-mode no;\n\
};\n\
\n\
"
zsk lifetime P30D algorithm 13;
csk key-store "hsm" lifetime P30D algorithm 8 2048;
};
+ manual-mode no;
max-zone-ttl 86400;
nsec3param ;
parent-ds-ttl 7200;
``insecure``. In this specific case, the existing key files should be moved
to the zone's ``key-directory`` from the new configuration.
+.. namedconf:statement:: manual-mode
+ :tags: dnssec
+ :short: Run key management in a manual mode.
+
+ If enabled, BIND 9 does not automatically start and progress key rollovers,
+ instead the change is logged. Only after manual confirmation with
+ :option:`rndc dnssec -step <rndc dnssec>` the change is made.
+
+ This feature is off by default.
+
.. namedconf:statement:: offline-ksk
:tags: dnssec
:short: Specifies whether the DNSKEY, CDS, and CDNSKEY RRsets are being signed offline.
signatures-validity-dnskey 14d;
// Zone parameters
+ manual-mode no;
inline-signing yes;
max-zone-ttl 86400;
zone-propagation-delay 300;
dnskey-ttl <duration>;
inline-signing <boolean>;
keys { ( csk | ksk | zsk ) [ key-directory | key-store <string> ] lifetime <duration_or_unlimited> algorithm <string> [ tag-range <integer> <integer> ] [ <integer> ]; ... };
+ manual-mode <boolean>;
max-zone-ttl <duration>;
nsec3param [ iterations <integer> ] [ optout <boolean> ] [ salt-length <integer> ];
offline-ksk <boolean>;
dns_ttl_t zone_max_ttl;
uint32_t zone_propagation_delay;
bool inline_signing;
+ bool manual_mode;
/* Parent settings */
dns_ttl_t parent_ds_ttl;
*\li 'kasp' is a valid, thawed kasp.
*/
+bool
+dns_kasp_manualmode(dns_kasp_t *kasp);
+/*%<
+ * Should we use manual-mode for this DNSSEC policy?
+ *
+ * Requires:
+ *
+ *\li 'kasp' is a valid, frozen kasp.
+ *
+ * Returns:
+ *
+ *\li true or false.
+ */
+
+void
+dns_kasp_setmanualmode(dns_kasp_t *kasp, bool value);
+/*%<
+ * Set manual-mode.
+ *
+ * Requires:
+ *
+ *\li 'kasp' is a valid, thawed kasp.
+ */
+
dns_ttl_t
dns_kasp_zonemaxttl(dns_kasp_t *kasp, bool fallback);
/*%<
kasp->inline_signing = value;
}
+bool
+dns_kasp_manualmode(dns_kasp_t *kasp) {
+ REQUIRE(DNS_KASP_VALID(kasp));
+ REQUIRE(kasp->frozen);
+
+ return kasp->manual_mode;
+}
+
+void
+dns_kasp_setmanualmode(dns_kasp_t *kasp, bool value) {
+ REQUIRE(DNS_KASP_VALID(kasp));
+ REQUIRE(!kasp->frozen);
+
+ kasp->manual_mode = value;
+}
+
dns_ttl_t
dns_kasp_zonemaxttl(dns_kasp_t *kasp, bool fallback) {
REQUIRE(DNS_KASP_VALID(kasp));
uint32_t zonepropdelay = 0, parentpropdelay = 0;
uint32_t ipub = 0, iret = 0;
uint32_t ksk_min_lifetime = 0, zsk_min_lifetime = 0;
- bool offline_ksk = false;
+ bool offline_ksk = false, manual_mode = false;
REQUIRE(config != NULL);
REQUIRE(kaspp != NULL && *kaspp == NULL);
dns_kasp_setinlinesigning(kasp, true);
}
+ obj = NULL;
+ (void)confget(maps, "manual-mode", &obj);
+ if (obj != NULL) {
+ manual_mode = cfg_obj_asboolean(obj);
+ }
+ dns_kasp_setmanualmode(kasp, manual_mode);
+
maxttl = get_duration(maps, "max-zone-ttl", DNS_KASP_ZONE_MAXTTL);
dns_kasp_setzonemaxttl(kasp, maxttl);
{ "dnskey-ttl", &cfg_type_duration, 0 },
{ "inline-signing", &cfg_type_boolean, 0 },
{ "keys", &cfg_type_kaspkeys, 0 },
+ { "manual-mode", &cfg_type_boolean, 0 },
{ "max-zone-ttl", &cfg_type_duration, 0 },
{ "nsec3param", &cfg_type_nsec3, 0 },
{ "offline-ksk", &cfg_type_boolean, 0 },