On Tue, Sep 15, 2015 at 08:17:56PM +0000, Andrei Popov wrote:
> Perhaps we can simplify the protocol by pulling client auth out of the
> handshake as follows:

Problem with pulling client auth out of the handshake is that it
complicates applications that can't change identities involved with
active connection.

And applications that can't take dynamic identites may still be
able to take static identities.

As then the application needs to ensure that the authentication
occurs between TLS handshake and actually starting up the protocol.

> 2. The client can send Certificate and CertificateVerify at any
> time application data is permitted, regardless of whether the
> server had previously sent CertificateRequest.

CertificateRequest contains the permitted signature algorithms
for the PoP signature, which TLS library needs to verify before
dumping the certificate chain on application (which can then
figure out things like trust anchors).

Without CertificateRequest, one has little idea what algorithms
are acceptable there.

> 3. The server can send CertificateRequest and NewSessionTicket at any
> time application data is permitted. Alternatively, the server can
> encapsulate CertificateRequest in an application protocol message.

If done with protocols that can't support dynamic authentication
properly, doing that tends not show up as things visibly breaking,
it tends to show up as subtle security holes.

Also, that doesn't properly bind NST with state is for (as already
noted), possibly causing screwy behaviour if TLS resumption is
attempted (client and server not agreeing on client identity, which
actually breaks definition of secure key exchange outright).

> Encapsulating CertificateRequest in an application protocol message
> allows the client to determine which specific application request
> resulted in the need for client auth.

The application protocols that would indicate this seem to be pretty
much the ones where dynamic authentication is unsafe.

Basically, one must clear the pipeline before changing identities,
and with protocols like HTTP/2, this is extremely expensive (seemingly
even more expensive than establishing a new connecion).

> We can decide exactly what CertificateVerify would be signing:
> whether it's the handshake hash or some form of RFC5705 Exported
> Keying Material (EKM).

Also, it should sign the certificate, to avoid possible weirdness
due to signatures not properly binding the key (some schemes do,
most don't).



-Ilari

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

Reply via email to