Hi,

Vinnie wrote:
> We understood when we examined these issues last year that the
> existing ALPN API would be sufficient. However it transpired,
> following HTTP2 server implementation efforts, that a particular
> use-case was difficult to address without sacrificing performance.

A few more details.

The discussion/decisions we had last year ended with requiring servers to inspect ClientHellos for the client's max TLS protocol/ciphersuites/SNI/ALPNs/etc, and then do any necessary configuration before actually starting the SSL/TLS/DTLS handshake on the server side. That included enabling specific SSL/TLS/DTLS protocols, ordering the ciphersuites (calling SSLParameters.setUseCipherSuitesOrder()) and ordering the ALPN values. If it turned out that the resulting selected combination was incorrect, and if you were using a SSLEngine, you could throw away the outbound handshake bytes and retry the same ClientHello with a completely new SSLEngine that is configured differently. Very awkward and would duplicate a lot of JSSE code in the application. And unfortunately, SSLSocket doesn't allow for intercept/retry, you'd have to retry using a brand new connection.

The approach was ok at the time, but the Servlet folks really had a hard time when it came to actually using the API. This came up in the discussion last June, and it's been something we've been wanting to address for JDK 9.

You can use the existing API as before, or if you want to examine the SSLEngine/SSLSocket mid-handshake, you can use the new one.

Thanks,

Brad


On 12/8/2016 4:29 PM, Vincent Ryan wrote:
We understood when we examined these issues last year that the existing ALPN 
API would be sufficient.
However it transpired, following HTTP2 server implementation efforts, that a 
particular use-case was
difficult to address without sacrificing performance.

This new API fixes that specific problem and the existing API is still 
available for the common case.


On 8 Dec 2016, at 23:13, David M. Lloyd <david.ll...@redhat.com> wrote:

On 12/08/2016 04:18 PM, Vincent Ryan wrote:
The Java Servlet Expect Group reported that they have identified a specific 
HTTP2 server use-case that cannot
be easily addressed using the existing ALPN APIs.

This changeset fixes that problem. It supports a new callback mechanism to 
allow TLS server applications
to set an application protocol during the TLS handshake. Specifically it allows 
the cipher suite chosen by the
TLS protocol implementation to be examined by the TLS server application before 
it sets the application protocol.
Additional TLS parameters are also available for inspection in the callback 
function.

This new mechanism is available only to TLS server applications. TLS clients 
will continue to use the existing ALPN APIs.

Wasn't the entire point of the chosen ALPN solution to make this kind of thing 
unnecessary?

--
- DML

Reply via email to