Hi @rvanoosterhout
your configuration is buggy - see your check created this morning - https://check-your-website.server-daten.de/?q=lbc-tel.werkonderweg.nl - but my output is buggy too.
CAA-Query sends a valid NSEC3 RR as result with the hashed query name "819dl4eo9f4b0pu4q7ld4ar26asqam7o" between the hashed NSEC3-owner "804t4dv6v1dqacgifch3ugdkde8l1u02" and the hashed NextOwner "83c5ednkdgaqg8b4c0osq2mm859qkavg". So the zone confirmes the not-existence of that CAA RR.
804t4dv6v1dqacgifch3ugdkde8l1u02 < 819dl4eo9f4b0pu4q7ld4ar26asqam7o < 83c5ednkdgaqg8b4c0osq2mm859qkavg
So that's a NXDOMAIN proof, not a NoData proof. NoData would require, that the hashed NSEC3-owner = the hashed query name , not <.
PS: Short:
NSEC3-Owner < QueryName < NextDomainName --> NXDOMAIN
NSEC3-Owner = QueryName < NextDomainName --> NoData, QueryName exists, but the specific RR doesn't exist.
But your subdomain has an A record, that's not a wildcard. So your subdomain exists as name in your zone (not only a wildcard expansion).
So the result is bogus -> Servfail.
My local Unbound instance confirms that:
CAA check is bogus:
[1617740658] libunbound[21376:0] info: validator operate: query lbc-tel.werkonderweg.nl. CAA IN
[1617740658] libunbound[21376:0] info: validator operate: chased to . TYPE0 CLASS0
[1617740658] libunbound[21376:0] debug: NODATA response failed to prove NODATA status with NSEC/NSEC3
[1617740658] libunbound[21376:0] info: validate(nodata): sec_status_bogus
lbc-tel.werkonderweg.nl. has no CAA record (BOGUS (security failure))
validation failure <lbc-tel.werkonderweg.nl. CAA IN>: nodata proof failed from 2001:9a0:2002:1::53:2 and 217.149.76.228
A check is secure:
[1617740722] libunbound[23064:0] info: validator operate: query werkonderweg.nl. DNSKEY IN
[1617740722] libunbound[23064:0] info: validated DNSKEY werkonderweg.nl. DNSKEY IN
[1617740722] libunbound[23064:0] debug: validator[module 0] operate: extstate:module_wait_subquery event:module_event_pass
[1617740722] libunbound[23064:0] info: validator operate: query lbc-tel.werkonderweg.nl. A IN
[1617740722] libunbound[23064:0] info: validate(positive): sec_status_secure
[1617740722] libunbound[23064:0] info: validation success lbc-tel.werkonderweg.nl. A IN
lbc-tel.werkonderweg.nl. has address 185.103.17.93 (secure)
PS:
Now the bug is fixed. New output, the third row is yellow:
CAA-Query sends a valid NSEC3 RR as result with the hashed query name "819dl4eo9f4b0pu4q7ld4ar26asqam7o" between the hashed NSEC3-owner "804t4dv6v1dqacgifch3ugdkde8l1u02" and the hashed NextOwner "83c5ednkdgaqg8b4c0osq2mm859qkavg". So the zone confirmes the not-existence of that CAA RR.
Bitmap: A, RRSIG Validated: RRSIG-Owner 804t4dv6v1dqacgifch3ugdkde8l1u02.werkonderweg.nl., Algorithm: 8, 3 Labels, original TTL: 14400 sec, Signature-expiration: 15.04.2021, 00:00:00 +, Signature-Inception: 25.03.2021, 00:00:00 +, KeyTag 16786, Signer-Name: werkonderweg.nl
Status: Fatal / bogus. NoError+NoDataResult sent, the answer says, the query name exists, the NSEC3 covers the Query Name, but there are not enough informations about wildcards (-1): NoError - there must be a confirmed wildcard expansion to create the query name. Recalculate the zone or update the name server software. Or there is a Man in the middle, who has removed one of the required NSEC3-Records, so DNSSEC works.