TLS ALPN Proposal
Michael McMahon
michael.x.mcmahon at oracle.com
Mon May 25 13:57:42 UTC 2015
On 25/05/15 12:34, Simone Bordet wrote:
> Hi,
>
> On Mon, May 25, 2015 at 12:08 PM, Michael McMahon
> <michael.x.mcmahon at oracle.com> wrote:
>> Hi Brad,
>>
>> A couple of initial comments/questions.
>>
>> 1) Certificate selection is one feature envisaged by ALPN. ie a client or a
>> server
>> ought to be able to choose a different certificate depending on the
>> application name
>> that gets negotiated. Is that possible with this API?
> Interesting.
>
> I can definitely see choosing the ALPN protocol based on the SNI name
> sent by the client.
> For example, a server able to speak http/1.1 and h2 receiving a
> request for http1.domain.com wants to force http/1.1.
> This would be possible, IIUC, using
> sslEngine.getHandshakeSession().getRequestedServerNames() in the
> ApplicationProtocolSelector implementation.
Perhaps, though it seems there are specific ALPNs for HTTP/1.1 ("http/1.1")
and for HTTP/2 ("h2"). So, I think you would use ALPN itself to do that
negotiation.
An incoming TLS connection without the ALPN extension is just assumed to
be HTTP/1.1
> I see less common choosing the certificate given the application
> protocol, but I understand it's mentioned in RFC 7301.
There aren't very many different "applications" envisaged yet. There are
a couple of NAT related protocols registered. But, actually having
thought about it
again, client certificate selection happens in the
X509ExtendedKeyManager class
and that implementation could presumably call
sslEngine.getHandshakeSession().getApplicationProtocol()
and select the client cert using that information. It doesn't do that
now obviously
but I think it could in future if necessary.
> ALPN definitely needs the cipher to be negotiated to support HTTP/2,
> so I hope it's not a chicken-egg problem.
>
I've been assuming that (by default) we just need to avoid using the
black-listed
ciphers and make sure to propose at least the one mandatory cipher; then
we shouldn't
have any problem. HTTP/2 apps can still create their own SSLContexts and
configure
them any way they want.
- Michael.
More information about the security-dev
mailing list