RFR 8226338: Updates to Stateless Resumption
Anthony Scarpino
anthony.scarpino at oracle.com
Mon Jul 15 23:04:54 UTC 2019
I've updated the webrev
http://cr.openjdk.java.net/~ascarpino/8226338/webrev.01/
As I need to push this by wednesday, please review it soon.
There are fixes for the comments that were made, added a NST for
boundVaules, a very basic test to make sure the post handshake NST is
sent after boundValues have changed.
There is no change to invalidate() as these is not enough time to
address that.
Tony
On 7/7/19 9:14 PM, Anthony Scarpino wrote:
> On 7/4/19 10:14 PM, Xuelei Fan wrote:
>> SSLSessionImpl.java
>> -------------------
>> 526 boolean checkSessionTicket(HandshakeContext hc) {
>> As the return value is a boolean type, the method is better to use
>> "isSomething". Otherwise, the meaning of the code
>> "!checkSessionTicket()" is clear and need to read the implementation
>> code.
>
> I'll see if I can come up with a "is*" name
>
>>
>> NewSessionTicket.java
>> ---------------------
>> 104 // opaque ticket<1..2^16-1>;
>> 108 if (m.remaining() < 6) {
>>
>> Per section 3.3, RFC 5077, line 104 should be:
>> opaque ticket<0..2^16-1>;
>
> I'm glad you saw that because it was confusing me why a zero buffer was
> allowed in 5077
>
>>
>> To be better understand the number 6, as you are already there, would
>> you please update line 104 as well?
>>
>> I did not get the idea of the update of
>> T13NewSessionTicketMessage.T13NewSessionTicketMessage(). It looks
>> like that the updated code does not comply to TLS 1.3 specification of
>> NewSessionTicket.
>>
>
> So I assume you are talking about the zero length ticket. I never
> noticed that 1.3 changed behavior away from zero length tickets. It
> would appear the spec writings made every attempt to make NST usage
> confusing between versions.
>
>>
>> 453 NewSessionTicketMessage nstm;
>> 454 nstm = new T12NewSessionTicketMessage(shc,
>> sessionTimeoutSeconds,
>>
>> Maybe better to use one statement.
>> 453 NewSessionTicketMessage nstm =
>> 454 new T12NewSessionTicketMessage(shc,
>> sessionTimeoutSeconds,
>>
>> 499 if (nstm.ticket.length == 0) {
>> Empty ticket should be not allowed in TLS 1.3 >
>> ServerHelloDone.java
>> --------------------
>> 110 if (shc.statelessResumption) {
>> 111 shc.handshakeConsumers.put(SSLHandshake.NEW_SESSION_TICKET.id,
>> 112 SSLHandshake.NEW_SESSION_TICKET);
>> 113 }
>>
>> I think the NewSessionTicket is produced by server and consumed in
>> client side. I did not get the idea to have NST consumer in server
>> side. Am I missing something?
>>
>
> Hmm.. I remember making this change, and I thought it was a good idea,
> but clearly it does nothing.
>
>> SessionTicketExtension.java
>> ---------------------------
>> 260 if (!hc.handshakeSession.checkSessionTicket(hc)) {
>> 261 return new byte[0];
>> 262 }
>>
>> From the above line, I guess why you use empty ticket for TLS 1.3,
>> although empty ticket is not allowed in TLS 1.3.
>>
>> I may suggest never use empty ticket. Always use a proper ticket in a
>> proper NewSessionTicket message, at least in format. When there is a
>> problem to retrieve the values, cache the session and prefer to use
>> the case rather than the ticket for session resumption. As may be a
>> little bit more interop friendly.
>
> Yes, the 1.3 non-zero length sure complicates the code.. Very unfortunate.
>
>>
>> 295 if (SSLLogger.isOn &&
>> SSLLogger.isOn("ssl,handshake")) {
>> 296 SSLLogger.fine("Encryption failed." +
>> e.getMessage());
>> 297 e.printStackTrace(); // Helps with
>> session.write()
>> 298 }
>>
>> Line 297 does not use SSLLogger. It could be:
>> SSLLogger.fine("Encryption failed", e);
>
> I didn't noticed logger accepted exceptions.
>
>>
>> On 7/2/2019 10:35 AM, Anthony Scarpino wrote:
>>>
>>> Hi,
>>>
>>> I need a code review on some updates to the stateless resumption.
>>> 1) Changing peerSupportedSignAlgs from a String[] to Collection[]
>>> 2) Additional items added to the stateless ticket
>>> 3) Not provide a stateless ticket when the masterkey is not
>>> accessible (FIPS) or when boundValues are used
>> I did not whether the update works if bound values are set after the
>> handshake completed (i.e., after the NewSessionTicket has been
>> produced and used). Did you have a test for the case?
>
> It was my understanding from previous discussions that we were going to
> take a wait and see approach with boundValues and NST.
>
> When I took a glance at how boundValues were added, they appear to be
> outside of the normal flow of the ConnectionContext.
>
>>
>> Thanks,
>> Xuelei
>>
>>> 4) Be more graceful in case of stateless ticket generation failure
>>>
>>> http://cr.openjdk.java.net/~ascarpino/8226338/webrev.00/
>>>
>>> Tony
>
More information about the security-dev
mailing list