mirror of
https://github.com/hickory-dns/hickory-dns.git
synced 2026-04-25 03:05:51 +03:00
[GH-ISSUE #1650] RFC-3655: Authenticated Data (AD) bit #727
Labels
No labels
blocked
breaking-change
bug
bug:critical
bug:tests
cleanup
compliance
compliance
compliance
crate:all
crate:client
crate:native-tls
crate:proto
crate:recursor
crate:resolver
crate:resolver
crate:rustls
crate:server
crate:util
dependencies
docs
duplicate
easy
easy
enhance
enhance
enhance
feature:dns-over-https
feature:dns-over-quic
feature:dns-over-tls
feature:dnsssec
feature:global_lb
feature:mdns
feature:tsig
features:edns
has workaround
ops
perf
platform:WASM
platform:android
platform:fuchsia
platform:linux
platform:macos
platform:windows
pull-request
question
test
tools
tools
trust
unclear
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/hickory-dns#727
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @moparisthebest on GitHub (Feb 28, 2022).
Original GitHub issue: https://github.com/hickory-dns/hickory-dns/issues/1650
Is your feature request related to a problem? Please describe.
When I'm looking up SRV records for instance, I need to know if the response is DNSSEC signed, because if so I can accept a certificate with the name of the target, and if not, I can't.
Also TLSA records can currently be looked up, but not used, because I have no idea if the zone was signed with DNSSEC or not.
Describe the solution you'd like
The returned
Lookupobject should either have the entire messageHeaderavailable on it, or should haveauthentic_data: boolcopied from it.Describe alternatives you've considered
I can instead have 2 resolvers, the first validating DNSSEC, and fallback to the second if no RRSIGs are present, but this is less than ideal, and may be vulnerable to RRSIG stripping. Also trust-dns doesn't support validating NSEC3 which an upstream resolver could do for me.
Additional context
If you give me guidance on what you'd like the solution to look like, maybe one of my proposals, maybe not, I'd submit a PR implementing the change.
@bluejekyll commented on GitHub (Mar 1, 2022):
This seems reasonable. One issue I see is if there are any additional requests made (to follow a CNAME chain for example). So we'll need a way to handle that scenario. An excessive option for that would be to copy the header onto each record in the
Lookup, or use anArc<Header>to reduce the overhead, on eachRecordindividually.Are there any other methods you can think of to achieve what you're looking for? I have been thinking even in the DNSSEC option that we probably need a bit more information associated to the lookups for the reasons you've specified.
@djc commented on GitHub (Sep 1, 2023):
Presumably if we just keep the
authenticated_databit life becomes a lot simpler, because we can fold theauthenticated_datain the sense that any CNAME chain element that is notauthenticated_datathen sets the bit tofalse, right? That seems like a reasonable route (that avoids stringing all the headers along).@wez commented on GitHub (Sep 1, 2023):
I tried to add
authentic_data: boolinto Lookup and then find where we connect a response to creating a lookup.I started in recursor.rs by threading the flag down into
insert_records, but stopped because a lot of the code seems to be built on passing around a tuple of records and expiry and it's not always clear how to connect that AD bit and thread it through to the right places.I found it hard to navigate the code to find this spot, because I am totally unfamiliar with this code, and I'm unsure of how you all would like this sort of change to be made, so I'm looking for guidance before trying to dive back in.
@bluejekyll commented on GitHub (Sep 3, 2023):
Agreed. Threading through options like this have been hard to make simple.