Matt Caswell wrote: > > Does anyone have any views on the below? Yup. Interleaving application & handshake records is a highly dangerous idea (and fortunately some TLS implementations will abort if you try).
http://www.ietf.org/mail-archive/web/tls/current/msg07648.html http://www.ietf.org/mail-archive/web/tls/current/msg09743.html -Martin > On 30/09/15 11:06, Matt Caswell wrote: > > Hi all > > > > I have a question on how to interpret RFC 5246 with regards to the > > interleaving of app data and handshake records. > > > > RFC 5246 (and RFC 4346 before it) contains these words: > > > > Note: Data of different TLS Record layer content types MAY be > > interleaved. Application data is generally of lower precedence for > > transmission than other content types. However, records MUST be > > delivered to the network in the same order as they are protected by > > the record layer. Recipients MUST receive and process interleaved > > application layer traffic during handshakes subsequent to the first > > one on a connection. > > > > This wording seems to place no limits whatsoever on when it is valid to > > receive app data in the handshake. By the wording in the RFC it would be > > valid for app data to be received *after* the ChangeCipherSpec has been > > received but *before* the Finished has been processed. > > > > There is also this wording: > > > > 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 > > short. > > > > I think this means that as soon as the first party sends a CCS, they > > must not send any app data until they have received a CCS back - they > > must buffer it until the CCS is seen - but on reading it again I'm not > > sure! If that were the case then the second party should never expect to > > see app data between CCS and Finished. It doesn't tell you anything > > about what the first party can expect though, i.e. is the second party > > allowed to send app data between the CCS and Finished? > > > > Finally there is also this: > > > > A Finished message is always sent immediately after a change > > cipher spec message to verify that the key exchange and > > authentication processes were successful. > > > > I suppose this trumps everything else, although as this section is > > specifically talking about handshakes you could interpret "immediately" > > as applying to the handshake sequence only without saying anything about > > interleaved app data records. > > > > I believe the intention is that app data should not be sent between the > > CCS and Finished but the RFC wording is not exactly crystal clear. This > > is the interpretation I have taken whilst fixing this OpenSSL bug: > > > > https://rt.openssl.org/Ticket/Display.html?id=3712&user=guest&pass=guest > > > > Can some confirm my interpretation is correct? > > > > Thanks > > > > Matt > > > > > > _______________________________________________ > TLS mailing list > TLS@ietf.org > https://www.ietf.org/mailman/listinfo/tls _______________________________________________ TLS mailing list TLS@ietf.org https://www.ietf.org/mailman/listinfo/tls