I realized I used the word "context" in two different, uh, contexts, so
that was probably very confusing.

What I meant to say is that TLS client certificate decisions need to be
remembered session-wide, for some appropriate notion of session. So
browsing profile or something of that nature. But within that scope, some
contexts are capable of prompting (user-visible tab) and others are not (a
service worker script, or a tab in the process being closed). It would be a
problem for the latter to poison the former, but they also rather
thoroughly share an HTTP session. It's a mess. Client certificates are the
bane of my existence. :-)

On Tue, Nov 7, 2023 at 10:46 PM David Benjamin <david...@chromium.org>
wrote:

> On Tue, Nov 7, 2023 at 3:43 PM Ilari Liusvaara <ilariliusva...@welho.com>
> wrote:
>
>> On Mon, Oct 23, 2023 at 01:37:55PM -0400, Viktor Dukhovni wrote:
>> >
>> >     - Some Java TLS libraries (used to?) fail the handshake when the
>> >       client has no configured certs, or the list of issuer CA DN hints
>> >       does include any of its available (typically just zero or one)
>> >       certificates.
>> >
>> >       They could just proceed without a certificate, or return a default
>> >       one, but they don't.
>>
>> A colleague discovered a case where sending CertificateRequest to Chrome
>> causes it to fail, instead of just proceeding without a certificate
>> (which would have worked).
>>
>
> I don't know the details of that case, but this would not surprise me. If
> we are in a context where we are unable to prompt the user (e.g. in a
> background context where we cannot show UI), that is the only viable
> option. TLS client certificate decisions in a browser, and generally in an
> HTTPS stack, have to be remembered context-wide. Otherwise we cannot do
> socket reuse or session resumption, and have to prompt the user on every
> HTTP request.
>
> But even continuing without a certificate is a decision. That means, if we
> automatically proceed without a certificate in unpromptable contexts, we
> poison the context and prevent the user from making an actual decision
> later. Moreover, this can even apply when there are zero matching
> certificates. On some platforms (e.g. Android), where the platform's
> security model (quite reasonably) prevents applications from directly
> enumerating the client certificate store, querying and prompting is a
> single combined operation. But this means we cannot even check for zero or
> non-zero certificates without triggering a prompt in the non-zero case,
> which again means we cannot trigger this code from background contexts.
>
> Moreover, on such platforms, the application is entirely at the mercy of
> the platform as to what kind of filtering or prompt suppressions are
> applied. On older Androids, this single combined operation does not
> automatically suppress empty prompts, and does not filter based on the CA
> list. Newer ones are capable, but it further makes optional
> CertificateRequests incoherent.
>
> Ultimately, TLS client certificates, and how they're used in practice,
> are just not suitable for user-facing HTTPS applications. But there is such
> a long history of existing usage, that the ship has not only sailed but
> also circumnavigated the globe a couple times. It's too late to simply say
> "oh this was a mistake, let's not do that anymore". :-(
>
> David
>
_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to