On 7/28/2019 5:25 AM, Stephen Farrell wrote:
> For example, my openssl build allows this for s_client. I've
> a colleague who's got a first build of curl using that that
> also allows such a local over-ride. I think other command-line
> clients might be likely to also support that kind of thing, if
> for no other reason than the existence of the draft-02 version
> that's deployed and has no public_name. But I guess being able
> to do a local over-ride may also be generally useful, while
> not being so useful for web browsers. For example, if a given
> public_name value is being censored, clients might at that
> point want to use something else.

I see the intent, but I am not sure it is practical. A lot of the HTTP
connection establishment is automated. Given a server name, the client
will do a lookup for the ESNI record or a cached value. If there is one,
the simple solution is to put the public name in the SNI extension and
the actual name in the ESNI extension. If the public name is censored,
the solution is probably to look for a different ESNI record for the
server, one that would mention a different public name.

By the way, I think that the current ESNI record is maybe a little too
complicated. The ESNI key is really a property of the public server, yet
the ESNI record is defined as a property of the hidden server. If the
public server rolls a new key, all the ESNI records of all the hidden
servers that mentioned the old key need to be updated. I think it would
be simpler to have the ESNI record as a property of the public server,
and to just have a pointer to the public server in the context of the
hidden server. May an SRV record. The chain would be something like:

1) Look up whether the SRV record for _esni._tcp.hidden.example.com

2) If there are such records, select the appropriate public server, say
public.example.net

3) Look up ESNI, A, AAAA for public.example.net

In that architecture, there is no need to encode the public server name
in the ESNI record. I think there will be several advantages. The ESNI
record's TTL can be set to the lifetime of the key. The SRV record's TTL
can be set to the expected lifetime of the relation between 'hidden" and
"public". If the SRV lifetime is long enough, the value can be
efficiently cached by the client. If multiple clients share the same
hidden server, the ESNI record is fetched only once, and can be cached.
At connection time, the client would only need to query the A/AAAA
records of the public server, i.e. exactly the same DNS transaction as
an access to the public server.

-- Christian Huitema




Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to