On Wed, Dec 18, 2024 at 02:14:50PM -0800, Devon O'Brien wrote:
> We have cut a new -03 version of the Trust Anchor Identifiers draft:
> 
> URL:
> https://www.ietf.org/archive/id/draft-beck-tls-trust-anchor-ids-03.txt
> 
> Status:   https://datatracker.ietf.org/doc/draft-beck-tls-trust-anchor-ids/
> 
> HTML:
> https://www.ietf.org/archive/id/draft-beck-tls-trust-anchor-ids-03.html
> 
> While we didn’t get any mic time in Dublin to present the updates since our
> presentation in Vancouver, we had several conversations with attendees and
> have incorporated some suggested changes as a result.

Some issues I have been thinking about (this all concentrates on server
certificates):


1) Certificate chain mismatches between services on the same server:

Trust Anchor IDs uses ServiceMode HTTPS/SVCB records to store list
of available roots in DNS. These are logically per (logical) server.

However, the available roots may differ between two services that
are pointed to the same server via AliasMode HTTPS/SVCB records.
Especially if considering intermediates as roots for intermediate
elision (e.g., Let's Encrypt randomly issues off two intermediates).

Furthermore, ECH adds another implicit service to every server in
order to update ECH keys or to disable ECH.


2) Load-balancing certificate flip-flop:

If server is load balanced, reconnects may go to different server,
which might be out of sync with the previous server.

As consequence, root lists from previous connection might not be
correct for reconnection (especially intermediates).

Just because some service has one IPv4 and one IPv6 address does not
mean there might not be plenty of flip-flop with updates.


3) Connections racing with certificate changes:

Even without load balancing, the root lists might change between
reconnections (especially intermediats). Servers usually withdraw
certificates suddenly with no grace period.

In server software of capable of hot-reloading certificates, such
races could even occur between sending HRR and client retrying.


4) How to repair mismatches:

I think that the only feasible way to repair mismatches on server
side would be to use HRR (regardless of any potential bad
interactions with ECH).

I think altering the TLS state machine for adding a new optional
pair of flights would be far too big change. And since reconnects can
not be transparent, those are no-go for many uses. Including ones that
would benefit a lot from trust anchor negotiation.

I don't think there is a fourth way.


And reconnects can pile up exponetially:

- Client tries with bad ECH, bad trust anchors, server fixes trust
  anchors.
- Client tries with bad ECH, good trust anchors, server fixes ECH.
- Client tries with good ECH, bad trust anchors, server fixes trust
  anchors (for different service!).
- Client tries with good ECH, good trust anchors. This succeds.


Then reconnects also bypass some TLS 1.3 downgrade protections. The
client has to be very careful not to introduce downgrade attacks in the
process. Furthermore, no authentication of any kind is possible here,
so the previous connection might have been to an attacker.


5) Client filtering of IDs:

Intermediate elision presumably requires including Trust Anchor IDs
for intermediates, and that presents some special considerations.

I presume that intermediate IDs should not be included without having
an root ID the intermediate chains to.

And where CA used is known to have unpredictable/backup issuers, or
rotate issuers, it could be useful to include related issuers even
if the server does not signal those (it is just a few dozen bytes at
most, I think the 5-set Let's Encrypt uses is exceptionally large).



Then some ideas:

- If Trust Anchor IDs fails to negotiate a certificate, it should just
  be ignored. That is, fall back to whatever processing would happen
  without the extension.

  Server should not explicitly fail unless it requires trust anchor
  negotiation, and is just plain incompatible with clients that do not
  support it.


- Send all the issuer chains in every (extended) ACME response, or have
  dedicated endpoint to download the issuer chain bundle per issuer.

  This avoids having ACME client combine multiple chains from
  alternatives. Which is not as easy as it sounds because the EE
  certificates can differ, which can lead to really bizarre edge cases.

  Having bundle of issuer chains also fits a lot better with the
  configuration model of a lot of existing TLS server software.




-Ilari

_______________________________________________
TLS mailing list -- tls@ietf.org
To unsubscribe send an email to tls-le...@ietf.org

Reply via email to