RFR 8211018: Session Resumption without Server-Side State

Xuelei Fan xuelei.fan at oracle.com
Thu Jun 6 17:20:25 UTC 2019


Continue for the rest of the update.

> On 6/3/2019 5:42 PM, Anthony Scarpino wrote:
>> http://cr.openjdk.java.net/~ascarpino/stateless/webrev.02 
Finished.java
-------------
  447             NewSessionTicket.handshake12Producer.produce(shc, 
message);

  624             SSLHandshake[] probableHandshakeMessages = new 
SSLHandshake[] {
  625                     SSLHandshake.NEW_SESSION_TICKET,
  626                     SSLHandshake.FINISHED
  627             };
  628
  629             for (SSLHandshake hs : probableHandshakeMessages) {
  630                 HandshakeProducer handshakeProducer =
  631                         shc.handshakeProducers.remove(hs.id);
  632                 if (handshakeProducer != null) {
  633                     handshakeProducer.produce(shc, fm);
  634                 }
  635             }

If reading the two blocks together, looks like NewSessionTicket producer 
is called twice at line 447 and line 633.

SSLSessionContextImpl.java
--------------------------
   73     private boolean statelessSession = true;
May be able to declare as 'final' field.

  230     private int getDefaultCacheLimit(boolean server) {
Except to get the default cache limit, this method also trying to get 
more configuration 
(jdk.tls.server.enableSessionTicketExtension/jdk.tls.client.enableSessionTicketExtension, 
etc).  To be more clear, it may worthy to update the method name or 
using different method for different purpose.

SSLSessionImpl.java
-------------------
  304     SSLSessionImpl(HandshakeContext hc, ByteBuffer buf) throws 
IOException {
  ...
  308         this.host = hc.conContext.transport.getPeerHost();
  309         this.port = hc.conContext.transport.getPeerPort();
  310         this.localSupportedSignAlgs = new ArrayList<>();

The host, port and localSupportedSignAlgs are using the current 
transport host and port, but not from the previous session.  There might 
be some potential security problems if the current 
host/port/localSupportedSignAlgs different from the precious session.

-------------
  320             // The CH session id may reset this if it's provided
  321             this.sessionId = new SessionId(true,
  322                     hc.sslContext.getSecureRandom());
New session ID are generated for resumption session.  There are might be 
compatibility issues because of the current SSLSession.getId() spec.

-------------
  312         boundValues = null;

Applications configured boundValues get lost.

Basically, I was wondering if the session data could be used to 
construct a SSLSession object that comply to the public APIs of 
SSLSession and ExtendedSSLSession.  Please make sure the following 
information is not missed (I may miss something, please double check the 
public API for sure):
     Session ID
     SSLSessionContext
     getLastAccessedTime
     How to invalidate? (see bellow question)
     boundValues
     peer principle (via cert)
     peer host
     peer port
     getPacketBufferSize/getApplicationBufferSize
     getPeerSupportedSignatureAlgorithms
     getStatusResponses


As John had reviewed the test code,  I will skip that part.


Okay, I'm done with the code review.  No major concerns to me.  I'm fine 
if you want to address my concerns after RPD1.

Thanks,
Xuelei



More information about the security-dev mailing list