> On Jun 15, 2016, at 2:25 PM, Simone Bordet <simone.bor...@gmail.com> wrote:
> 
> Hi,
> 
> On Wed, Jun 15, 2016 at 8:12 PM, Jason Greene <jason.gre...@redhat.com> wrote:
>> Here is an H2 example:
>> 
>> The ClientHello expressing interest in both h2, and h1, and lists the 
>> ciphers:
>>    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
>>    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
>> 
>> So in this case the client is expressing a preference for a CBC cipher using 
>> stronger keys, but is blacklisted by h2 due to not being GCM, but this is 
>> allowed by h1. The JDK will follow the client hello as the TLS spec 
>> describes, and so it will select TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, and 
>> the protocol stack will incorrectly select h1.
>> 
>> Now technically H2 clients can avoid this by ordering h2 compliant ciphers 
>> on top, but they might not do so.
>> 
>> The flaw really starts to show when you have multiple alternative protocols 
>> with completely different requirements. As an example, if you have a 
>> hypothetical protocol which does not perform certificate based 
>> authentication, and instead utilizes pre-shared keys or anonymous ciphers, 
>> that protocol can never be selected unless those algs are on the top of the 
>> list, if they are on the top of the list then h2 can’t be selected.
>> 
> 
> I'm not sure what you want to show here.
> If you want to prefer ciphers, you have to give up on protocol and
> viceversa, that's normal business.
> 
> If there is no decision, then there is a conflict; if there is a
> decision, then the solution I propose works equally well to what you
> guys propose.
> 
> There is no "flaw", it is just undecidable.
> What am I missing ?

The point is that protocol isn’t a function of cipher, rather protocol and 
cipher are two inputs that must be cooperatively analyzed when making a 
decision. If H2 is the preferred protocol, then you analyze the cipher set to 
find the most preferred compliant match. So the best outcome is cipher = 
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256” & protocol = h2. If there isn’t a 
compliant h2 match, then you fall back to h1.

-Jason




Reply via email to