FEATURE: Support ignoring the ech=
parameter in HTTPS
/SVCB
RR types
#3485
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
ECH (Encrypted Client Hello) is a new-ish TLS feature that lets clients communicate with a server, without revealing the SNI (desired domain) in plaintext. To solve the bootstrapping problem (how do you encrypt data to a server without knowing its public key?), you typically need to publish the server's public key in the DNS. This effectively leaves us with 3 options:
Manage the DNS exclusively with DNSControl. This means that you'll have to manually generate and rotate keys for all of your servers, which is both crypographically-unwise (since key management can't be automated), and a giant pain (since you'll need to manually copy-and-paste random base64-encoded strings into your
dnsconfig.js
).Ignore the
HTTPS
/SVCB
records by placingIGNORE(<name>, "HTTPS")
into yourdnsconfig.js
. This means that if you want to change the TTL, target, or other SvcParams, you'll need to do this outside of DNSControl. But it's typically web servers that will be setting theech=
key, and since most web servers don't provide an interface to set arbitrary DNS records, there isn't any good way to change these parameters.Modify DNSControl to support ignoring the
ech=
key (while still allowing to change everything else). That's what this PR implements.I've tested this PR and it works as expected on my server, but the implementation is a bit of a mess. Some possible questions:
HTTPS
/SVCB
RRs for a single FQDN?IGNORE
?diff2.diffTargets()
the correct place to implement this logic?Thanks!