Change:
A list of extensions that the client can take into consideration when generating a Client Hello message.  The format is defined in RFC8446; Section 4.2.  The purpose of the field is to provide room <del> for additional features in the future; this document does not define any extension. </del> <ins> for additional features in the future.  An extension may be tagged as mandatory by using an extension type codepoint with the high order bit set to 1.  A client which receives a mandatory extension they do not understand must reject the record. </ins> The semantics of this structure are simple: any of the listed keys may be used to encrypt the SNI for the associated domain name.  The cipher suite list is orthogonal to the list of keys, so each key may <del> be used with any cipher suite. </del> <ins> be used with any cipher suite.  Clients MUST parse the extension list and check for unsupported mandatory extensions.  If an unsupported mandatory extension is present, clients MUST reject the ESNIKeys record. </ins> This structure is placed in the RRData section of an ESNI record as- is.  Servers MAY supply multiple ESNIKeys values, either of the same

Discussion:
This change does the following: Add support for mandatory extensions, which are those that clients must process else reject the ESNIKeys record. Add a mandatory extension carrying a set of v4/v6 addresses, which is effectively the combined record mode. Add text describing how clients ought to resolve ESNI and A/AAAA records, and use the results to initiate TLS connections.
That's fair. However, it seems to be the price to get this sort of simplicity. Moreover, as an extension, it's not pressed upon all clients for all providers. Also true! I'm hoping that folks who are in the position and capable of vending these records can comment on this design's cost.
Given that there was no serious objection to this change and that it works for at least one operator, I'm merging this PR. We can continue to iterate on as needed in parallel.
issues and advocate for the removal of the _esni prefix. A significant side effect of that is that it becomes impossible to use a CNAME at the apex of a zone in order to refer to ESNIKeys of a server operated elsewhere. Inlining keys, as is often done with A/AAAA at the apex, is not plausible due to key rotation. The issue can largely be mitigated with the introduction of an inclusion mechanism directly in the TXT/ESNI record.
This should be fixed by and follow up changes. Closing as such. Please reopen if necessary!
I don't believe resolves this. 136 effectively requires the address and ESNI information to be stapled together (which I still find objectionable). The issue here is that the apex cannot use a CNAME to delegate to the actual third party provider's ESNI record.. typically it just includes an A/AAAA record at the apex and hopes the pointer doesn't go stale. That's bad enough for A/AAAA but it would be terrible for ESNI because it means copying keying information and hoping it doesn't go stale between two different entities. NAME can you reopen?
Sure! Sorry for the misunderstanding. We can probably update this PR to make use of the new DNS-specific extensions.
Fixed by .
This is a substantial step in the right direction, but the fact that A/AAAA records are basically ignored makes me uneasy. The fact that A/AAAA results are essentially fully embedded would imply that all logic involved in selectively returning those responses has to be duplicated for ESNIKeys, which is also sub-optimal.