Le 21/07/2014 16:16, Jeff MAURY a écrit :
> On Mon, Jul 21, 2014 at 3:32 PM, Emmanuel Lécharny <elecha...@gmail.com>
> wrote:
>
>> Le 21/07/2014 11:53, Jeff MAURY a écrit :
>>> On Mon, Jul 21, 2014 at 5:14 AM, Emmanuel Lécharny <elecha...@gmail.com>
>>> wrote:
>>>
>>>> Le 20/07/2014 23:11, Jeff MAURY a écrit :
>>>>
>>>>    record layer to make the write pending state the write active state.
>>>> The SSL sepc says basically the same thing.
>>>>
>>>> However, that only means we shoudl switch to the new keys when the
>>>> handshake is done. It does not say anything about any pending message.
>>>>
>>>> I still think that once one peer has started an HandShake, whatever
>>>> pending message will be lost, because I don't think the SslEngine will
>>>> handle an incoming data not being part of the handshake protocol.
>>>>
>>> TLS 1.2 spec says (chapter 7.1):
>>>
>>> Note: If a rehandshake occurs while data is flowing on a connection,
>>>    the communicating parties may continue to send data using the old
>>>    CipherSpec.  However, once the ChangeCipherSpec has been sent, the
>>>    new CipherSpec MUST be used.  The first side to send the
>>>    ChangeCipherSpec does not know that the other side has finished
>>>    computing the new keying material (e.g., if it has to perform a
>>>    time-consuming public key operation).  Thus, a small window of time,
>>>    during which the recipient must buffer the data, MAY exist.  In
>>>
>>>    practice, with modern machines this interval is likely to be fairly
>> Good find !!!
>>
>> However, I wonder how the SslEngine will react in this case... Time for
>> some experimentation !
>>
> The spec clearly specify that there is a current read and write key
> materials and a pending one.
Yes, but I'm afraid the SslEngine does not make any difference between
Handshake messages and non-handshake message. I'd like to be proven
wrong though.


>
>>
>>> So, in my opinion, we may continue sending the old data using the old
>> keys
>>> even after we received the re-handshake request.
>>> The only problem that I see is if the user submit messages before the
>>> initial handshake has been completed.
>> Hmmm. That would mean the user does not wait for the handshake to
>> complete, which sounds like a pb. All in all, the client which initiate
>> a new HandShake is supposed to wait for this handshake to be completed,
>> before sending anything, right ? OTOH, what if the client has some
>> pending messages...
>>
> BTW, we don't have an event to signal the end of the handshake (which is
> what we need to think about) and even if we had one, we need to handle this
> case.

Here, I guess you mean something like HandshakeDone in the IoHandler
interface ? Not sure we need one.

Do you have something else in mind ?

>
>>> As we decided to encrypt messages
>>> when they are submitted, we may not be able to encrypt because the
>>> handshake is not finished so the ssl engine has no key materials yet.
>> Yes, but I thought we agreed on the fact that messages should only be
>> encrypted when we are writing them in teh socket, not before?
>>
> No, I revert it because it will not be in line with the re handshake case.
> And you agreed (July 19th 6:25PM):
>
>> The problem is that if we encrypt before sending it's likely that we will
> encrypt with the new key if the handshake message has been read processed
> by the ssl engine
>
> That, I agree. IMO, we should never encrypt before sending.

I agreed that we should encrypt at the last moment, when we are ready to
write in the socket, not before.

Reply via email to