It sounds like your confusion is stemming from section 6.1.6. Upon
re-reading it, I see some room for clarity there.

Section 6.1.6 says what to do if "retry_configs" contains a value with a
client-supported version (retry with with one of those configs), and what
to do if "none of the values provided in "retry_configs" contains a
supported version, or an earlier TLS version was negotiated" (retry without
ECH). My implied reading of section 6.1.6 is that if there is no
"retry_configs", then the latter also applies (retry without ECH). That
could be made more explicit.

I disagree that any particular retry behavior should be mandated. Clients
that want wide interoperability will implement retry without ECH whether or
not the spec says it's a MUST, and likewise clients that will only connect
if ECH is used will choose to not implement the fallback regardless of what
the spec says.

On Wed, Oct 19, 2022 at 8:36 PM Safe Browsing <safebrowsing...@gmail.com>
wrote:

> Hi Nick,
>
> Thanks for your input.
>
> Yes, what I am suggesting is instead of having: "Depending on whether X,
> this may Y or Z".
> Rather state: "If X, then MUST Y, else MUST Z"
>
> So, instead of this text in Section 8.2:
>
> "Depending on whether the client is configured to accept the proxy's
> certificate as authoritative for the public name, this may trigger the
> retry logic described in Section 6.1.6
> <https://www.ietf.org/archive/id/draft-ietf-tls-esni-15.html#rejected-ech>
>  or result in a connection failure. ..."
>
> Have something like this:
>
> "*If* the client is configured to accept the proxy's certificate as
> authoritative for the public name, the retry logic described in Section
> 6.1.6
> <https://www.ietf.org/archive/id/draft-ietf-tls-esni-15.html#rejected-ech>
>  *MUST* be exercised. Else, a connection failure *MUST* result. ..."
>
> Note that the second 'MUST' (the one in the 'else' case) is not new. It is
> already stated in the first paragraph in Section 6.1.6 as required behavior.
>
> Also note that the retry in this case would not involve the
> "retry_configs" method mentioned in Section 6.1.6. Instead, it would be
> retrying the handshake with a new transport connection and ECH disabled.
> This, ECH disabled retry, is mentioned in Section 6.1.6, but only in the
> context of "retry_configs" containing non-supported versions, or if an
> earlier TLS version was negotiated.
>
> Thus, as I also stated in one of my earlier emails, Section 6.1.6 is not
> very clear about the retry mechanism to be followed in the case discussed
> here.
>
> A suggestion for changing the text of one of the paragraphs of Section
> 6.1.6, to be more clear/explicit, would be to change:
>
> "If none of the values provided in "retry_configs" contains a supported
> version, or an earlier TLS version was negotiated, the client can regard
> ECH as securely disabled by the server, and it SHOULD retry the handshake
> with a new transport connection and ECH disabled."
>
> To:
>
> "If none of the values provided in "retry_configs" contains a supported
> version, or an earlier TLS version was negotiated, *or an 
> **"encrypted_client_hello"
> extension was not supplied by the server,* the client can regard ECH as
> securely disabled by the server, and it *MUST* retry the handshake with a
> new transport connection and ECH disabled."
>
> This type of retry would be required only once, and a precondition for
> this "securely disabled" state is already stated in one of the earlier
> paragraphs in the same section. Namely, that the server/certificate must be
> authoritative for the public name.
>
> Again the 'MUST' in this suggested text. Note that it does not pertain to
> the "retry_configs", as stated already. But rather to the case where ECH
> has been disabled securely, in which case it would be good if the
> specification can provide the way a stack must operate in such a situation
> which the specification prescribes. I believe having a MUST here, and in
> the previous instance mentioned at the top of this email, will make stacks
> that wish to comply with the specification much more likely to to implement
> this retry mechanism, resulting in a more robust ECH deployment and
> operating environment.
>
> To the comment about Section 8.1. Yes, that section has this text that is
> relevant here:
>
> "If the server does not understand the "encrypted_client_hello" extension
> at all, it will ignore it as required by Section 4.1.2
> <https://rfc-editor.org/rfc/rfc8446#section-4.1.2> of [RFC8446
> <https://www.ietf.org/archive/id/draft-ietf-tls-esni-15.html#RFC8446>].
> Provided the server can present a certificate valid for the public name,
> the client can safely retry with updated settings, as described in Section
> 6.1.6
> <https://www.ietf.org/archive/id/draft-ietf-tls-esni-15.html#rejected-ech>
> ."
>
> So it simply refers back to Section 6.1.6 again, which then gets back to
> my earlier statement about Section 6.1.6 not being as clear as it can be
> about this situation. I.e. the situation were a retry is with ECH disabled,
> due to the lack of an ECH extension from the server, as opposed to the
> "retry_config" retry method with ECH still enabled - they are of course
> very different retry mechanisms.
>
>
> On Wed, Oct 19, 2022 at 1:44 AM Nick Harper <i...@nharper.org> wrote:
>
>>
>>
>> On Tue, Oct 18, 2022 at 8:56 PM Safe Browsing <safebrowsing...@gmail.com>
>> wrote:
>>
>>> The draft does consider this by allowing ECH to be disabled - as
>>> discussed in this thread. Albeit at the cost of an extra round trip.
>>> However, the connection retry logic in the presence of ECH disabling is
>>> currently optional.
>>>
>>> The draft states, in Section 8.2:
>>> “ this may trigger the retry logic”
>>>
>>> It seems this text must change to:
>>> “ this MUST trigger the retry logic”
>>>
>>
>> This language change would not make sense. The context for "this may
>> trigger the retry logic" in section 8.2 offers two options. The sentence
>> structure is "Depending on whether X, this may Y or Z", i.e. if X is
>> resolved one way, then the client does Y, otherwise it does Z. Changing the
>> "may" to "MUST" would result in stating "this MUST trigger the retry logic
>> described in Section 6.1.6 or result in a connection failure", which
>> doesn't really make sense, and wouldn't have the goal you'd like, since a
>> connection failure instead of retry logic would satisfy the MUST.
>>
>> If your server is authoritative for the public name, then the behavior
>> you care about is described in section 8.1.
>>
>> I suspect most implementations of ECH will implement the retry logic, as
>> the misconfigurations and deployment concerns described in section 8.1 are
>> an inevitability, and implementing the retry logic avoids connection
>> failures that would occur without it. I doubt that adding a MUST would make
>> someone more likely to implement the retry logic.
>>
>>>
>>> In order to ensure functional connections in a TLS client agnostic
>>> manner, in the presence of protocol level ECH disabling.
>>>
>>> I would appreciate your thoughts/input.
>>>
>>> On Oct 8, 2022, at 7:41 PM, Eric Rescorla <e...@rtfm.com> wrote:
>>>
>>> 
>>> If you are able to install a new trust anchor, then you should be able
>>> to use the enterprise configuration mechanisms in browsers to disable ECH.
>>>
>>> -Ekr
>>>
>>>
>>> On Fri, Oct 7, 2022 at 8:40 PM Safe Browsing <safebrowsing...@gmail.com>
>>> wrote:
>>>
>>>> Hi Rich,
>>>>
>>>> When I say “authoritative”, I mean it in the true TLS sense, in the way
>>>> that I believe the ECH draft also suggests and requires.
>>>>
>>>> In other words, the middlebox serves a cert to the client that is
>>>> cryptographically valid for the said public name of the client facing
>>>> server.
>>>>
>>>> How can that be when the client facing server guards its private key
>>>> properly? By re-signing the server certificate on the middlebox with a
>>>> private key, local to the middle box only, for which the corresponding
>>>> certificate has been installed in the trust store of the client, before
>>>> sending it on to the client. Only after the original server
>>>> certificate has been validated properly on the middlebox, of course. 
>>>> Message
>>>> digests being managed accordingly/appropriately.
>>>>
>>>> That is a very typical setup for most (all?) TLS inspection devices
>>>> (next gen firewalls and such).
>>>>
>>>> Thus this part of ECH, requiring the middlebox to be authoritative for
>>>> the server, is well understood and prolifically exercised in inspected TLS
>>>> sessions today. What is new is that these connections can now fail/close,
>>>> in the “securely disabling ECH” case, and the onus is on the TLS client,
>>>> not the application, to retry the connection without ECH.
>>>>
>>>> I am after such a client, if one exists already.
>>>>
>>>> Thank you.
>>>>
>>>> Sent from my phone
>>>>
>>>> On Oct 7, 2022, at 11:41 AM, Salz, Rich <rs...@akamai.com> wrote:
>>>>
>>>> 
>>>>
>>>>
>>>>
>>>>    - Client <-> *Middlebox* <-> Client-facing server <-> Backend server
>>>>
>>>>
>>>>
>>>>    - With "Middlebox" really meaning a middlebox like a firewall or
>>>>    similar.
>>>>
>>>>
>>>>
>>>> The middlebox is not allowed to modify traffic between the client and
>>>> the server. Doing so would mean that the packets the client sent are not
>>>> the ones that the server received, and the two message digests would
>>>> disagree.  (If you think about things, it **has** to be this way,
>>>> otherwise TLS would not be able to provide integrity guarantees.)
>>>>
>>>>
>>>>
>>>>    - From the draft, ECH seems to be designed to still allow
>>>>    successful TLS connection establishment if the encrypted_client_hello
>>>>    extension is dropped from the ClientHello on a conforming middlebox.
>>>>    Provided that the middlebox is authoritative for the client-facing 
>>>> server's
>>>>    public name, as reported/delivered by DNS to the client. We can assume 
>>>> that
>>>>    this is the case here.
>>>>
>>>>
>>>>
>>>> I do not understand what you mean by this.  The word “authoritative” is
>>>> used to mean that it has a certificate and keypair and can do TLS
>>>> termination. DNS giving the client a particular IP address is not
>>>> authoritative. It can be confusing because DNS terminology uses
>>>> authoritative to mean that a particular entity can prepare data used for
>>>> DNS responses.  But it is not authoritative in the TLS sense.
>>>>
>>>>
>>>>
>>>> I think your questions can be answered with those two overall
>>>> corrections above.  If not, please continue the thread.  (And feel free to
>>>> repost from your note since I trimmed for brevity.)
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> TLS mailing list
>>>> TLS@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/tls
>>>>
>>> _______________________________________________
>>> TLS mailing list
>>> TLS@ietf.org
>>> https://www.ietf.org/mailman/listinfo/tls
>>>
>>
_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to