]> git.bitcoin.ninja Git - dnssec-prover/commitdiff
Ignore spurious `RRSig`s which sign `DNSKEY`s with a ZSK
authorMatt Corallo <git@bluematt.me>
Tue, 9 Jul 2024 20:33:37 +0000 (20:33 +0000)
committerMatt Corallo <git@bluematt.me>
Tue, 9 Jul 2024 20:52:09 +0000 (20:52 +0000)
There's no reason to include an `RRSig` signing `DNSKEY`s with a
ZSK - validators only care about the KSK signing `DNSKEY`s, hence
*Key*-Signing Key. However, OVH appears to include such signatures
anyway, which we must ignore.

Here we do so by pre-filtering the `RRSig`s we try to validate by
key tag before calling `verify_rrsig`. This causes us to calculate
the key tag a few extra times, but that's not a huge deal.

src/validation.rs

index fc188a46dff0d04c8ee3e330b12e63bcccc69f90..35096512ea52e4bd04f4bbf020f72a022a56cf7d 100644 (file)
@@ -187,6 +187,12 @@ where RI: IntoIterator<IntoIter = R>, R: Iterator<Item = &'r RRSig>,
 
        let mut found_unsupported_alg = false;
        for sig in sigs {
+               if !validated_dnskeys.iter().any(|key| key.key_tag() == sig.key_tag) {
+                       // Some DNS servers include spurious RRSig records signed by the ZSK covering the
+                       // DNSKEY set (looking at you OVH). This is harmless (but wasteful) and we should
+                       // ignore such signatures rather than immediately failing.
+                       continue;
+               }
                match verify_rrsig(sig, validated_dnskeys.iter().copied(), records.clone()) {
                        Ok(()) => return Ok(sig),
                        Err(ValidationError::UnsupportedAlgorithm) => {