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

Reply via email to