DNSSEC validation is failing because the DNS resolver can’t cryptographically verify the authenticity of DNS records.
Common Causes and Fixes for DNSSEC Validation Failures
-
Expired DNSSEC Keys:
- Diagnosis: Check the validity periods of your DNSSEC keys, specifically the Key Signing Key (KSK) and Zone Signing Key (ZSK). Tools like
dig +dnsseccan show you the signatures and their validity. You can also use online DNSSEC validators. - Fix: If keys have expired, you need to re-sign your zone with new keys. This involves generating new ZSKs, rolling over the KSK (if necessary), and updating the DS record at the parent zone with the new KSK’s public information. For example, if your domain is
example.com, you’d use tools likednssec-signzoneor your DNS provider’s interface to re-sign. The process often involvesdnssec-signzone -N increment -o example.com -t db.example.com.signed db.example.comfollowed by uploading the newdb.example.com.signedand updating the DS record at the.comregistry. - Why it works: DNSSEC relies on a chain of trust anchored by cryptographic signatures. Expired keys break this chain, as older signatures are no longer considered valid. Re-signing with current keys restores the chain of trust.
- Diagnosis: Check the validity periods of your DNSSEC keys, specifically the Key Signing Key (KSK) and Zone Signing Key (ZSK). Tools like
-
Incorrect DS Record at Parent Zone:
- Diagnosis: Verify that the Delegation Signer (DS) record for your domain matches the KSK of your zone exactly. This includes the Key Tag, Algorithm, Digest Type, and Digest. Use
dig DS example.com @a.iana-servers.netto check the DS record at the parent zone (IANA for.comor.org). Compare this digest with the KSK digest of your zone. - Fix: Correct the DS record at the parent zone registrar. This usually involves logging into your domain registrar’s portal and updating the DS record to match the current KSK information from your zone. For example, if the DS record at
.comis12345 8 1 1234567890ABCDEF..., and your zone’s KSK digest isFEDCBA0987654321..., you’d update the DS record at the registrar to reflect the correct digest. - Why it works: The DS record at the parent zone is the link that allows a resolver to verify the authenticity of your zone’s keys. If it’s incorrect, the resolver cannot establish trust in your zone, even if your zone’s keys are valid.
- Diagnosis: Verify that the Delegation Signer (DS) record for your domain matches the KSK of your zone exactly. This includes the Key Tag, Algorithm, Digest Type, and Digest. Use
-
Clock Skew on DNS Servers:
- Diagnosis: Ensure that the system clocks on your authoritative DNS servers are synchronized with accurate time sources (e.g., NTP servers). Significant clock skew can cause signatures to appear expired or not yet valid. Use
ntpdate -q pool.ntp.orgorchronyc sourcesto check. - Fix: Configure and enable NTP on your DNS servers. For example, on a Linux system, edit
/etc/ntp.confto point to reliable NTP servers and ensure thentpdservice is running:systemctl enable ntp && systemctl start ntp. - Why it works: DNSSEC signatures have validity periods tied to time. If a server’s clock is significantly ahead or behind, it might incorrectly assess a signature as expired or not yet valid, leading to validation failures.
- Diagnosis: Ensure that the system clocks on your authoritative DNS servers are synchronized with accurate time sources (e.g., NTP servers). Significant clock skew can cause signatures to appear expired or not yet valid. Use
-
Incorrectly Rolled-Over Keys:
- Diagnosis: If you’ve recently rolled over your KSK or ZSK, there’s a period where both the old and new keys are active. Ensure the zone has been re-signed with the new keys and that the DS record at the parent zone points to the new KSK. Check the serial numbers and signatures for both old and new keys in your zone file and the DS record at the parent.
- Fix: Complete the key rollover process. This typically involves:
- Publishing the new KSK (if changing KSK) or ZSK.
- Waiting for the new ZSK’s signature to propagate and become valid.
- Updating the DS record at the parent zone to point to the new KSK.
- Waiting for the DS record update to propagate.
- Removing the old KSK.
For example, if your serial is
2023010101, after a rollover, you might see signatures from both serials. The DS record at the parent must point to the new KSK’s digest.
- Why it works: A smooth key rollover requires careful coordination between the zone’s keys and the DS record at the parent zone. A mismatch during the transition, where the DS record points to an old KSK or a new KSK that isn’t yet trusted by the chain, will cause validation failures.
-
Zone File Syntax Errors or Missing Records:
- Diagnosis: Ensure your zone file is syntactically correct and contains all necessary DNSSEC records (RRSIG, DNSKEY, NSEC/NSEC3). Missing or malformed RRSIG records for critical record types will cause validation to fail. Use
named-checkzone -d yourzone yourzonefileto check for errors. - Fix: Correct any syntax errors in the zone file and ensure all required DNSSEC records are present and correctly formatted. For example, if an
Arecord is missing its correspondingRRSIGrecord,named-checkzonewill flag it, and you’ll need to regenerate the signature for that record. - Why it works: DNSSEC validation requires that every record type in a zone is cryptographically signed. If a signature is missing or malformed, the resolver cannot verify the integrity of that record, leading to a validation failure for the entire zone.
- Diagnosis: Ensure your zone file is syntactically correct and contains all necessary DNSSEC records (RRSIG, DNSKEY, NSEC/NSEC3). Missing or malformed RRSIG records for critical record types will cause validation to fail. Use
-
Resolver Configuration Issues:
- Diagnosis: If you control the validating resolver (e.g., BIND, Unbound), check its configuration. Ensure DNSSEC validation is enabled (e.g.,
dnssec-enable yes;in BIND,auto-trust-anchor-file: "/var/lib/unbound/root.key"in Unbound). Also, check that the resolver has access to the root trust anchor (TA) and that it’s up-to-date. - Fix: Enable DNSSEC validation in your resolver’s configuration and ensure the trust anchor is correctly configured and updated. For BIND, add
dnssec-validation auto;tonamed.conf.options. For Unbound, ensureauto-trust-anchor-fileis set and that the file is populated (e.g.,unbound-anchor -a /var/lib/unbound/root.key). - Why it works: The validating resolver is the component that performs the cryptographic checks. If it’s not configured to perform DNSSEC validation or lacks the necessary trust anchors, it cannot verify DNSSEC-signed zones.
- Diagnosis: If you control the validating resolver (e.g., BIND, Unbound), check its configuration. Ensure DNSSEC validation is enabled (e.g.,
The next error you’ll likely see after fixing DNSSEC validation is a SERVFAIL response from the resolver for all queries to the affected domain, indicating that the resolver encountered an issue during the DNS resolution process.