> On Aug 10, 2015, at 10:04 PM, Andrei Popov <andrei.po...@microsoft.com> wrote:
> 
>> Ideally a solution would work with HTTP/1 over TLS 1.3, HTTP/2 over TLS 1.3, 
>> HTTP/2 over TLS 1.2, and for completeness HTTP/1 over TLS 1.2.
> Correct, anything less than this will create deployment problems.
> 
>> I’d like to point out that I am very interested in this use case, but I’m 
>> not sure that this is the solution.
> I'm open to alternatives that fix the broken use case. 

One solution would be to move the authentication for this use case (and perhaps 
for HTTPS in general) from the transport layer to either HTTP as an 
authentication method or to the application (through some standardized exchange 
of JSON objects).

Another option is to allow renegotiation and your mechanism in HTTP/2 with some 
change of behavior that eliminates the race condition. For example:
 1. The server receives a request for a resource that requires a client 
certificate
 2. The server sends a new HTTP message (or code) that says that client 
certificate authentication is required.
 3. The client sends a new HTTP control frame with the highest number of 
resource that it has requested.
 4. The server finishes serving all resources that don’t need authentication 
with a number below what the client sent
 5. The client does not initiate any new requests.
 6. When the server is done, it initiates renegotiation or the new mechanism
 7. After renegotiation, the client can resume sending requests, all of which 
are authenticated.

The details may be different, but something like this can bring determinism to 
the process.

>> We still get a race condition where several requests might be answered 
>> before, after or during authentication depending on the timing of the TLS 
>> handshake message vs the HTTP messages.
> The idea is that before answering a request that requires client auth, the 
> server checks if a client cred is available. If there is no suitable client 
> cred available, the request is blocked until the client authenticates. This 
> does not necessarily have to block other requests that do not require client 
> auth.

This is a somewhat contrived example, but consider an object in the web page 
that says “Hello, guest” when no credential is available, and “Hello, Andrei” 
when a credential is available.  If the page has optional authentication and 
you have presented the certificate, then depending on timing you might still 
see “Hello, guest” on the page.

Yoav

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

Reply via email to