On Wed, 29 May 2024 18:53:55 GMT, Anthony Scarpino <ascarp...@openjdk.org> 
wrote:

> Hi
> 
> This change is to improve TLS 1.3 session resumption by allowing a TLS server 
> to send more than one resumption ticket per connection and clients to store 
> more.  Resumption is a quick way to use an existing TLS session to establish 
> another session by avoiding the long TLS full handshake process.  In TLS 1.2 
> and below, clients can repeatedly resume a session by using the session ID 
> from an established connection.  In TLS 1.3, a one-time "resumption ticket" 
> is sent by the server after the TLS connection has been established.  The 
> server may send multiple resumption tickets to help clients that rapidly 
> resume connections.  If the client does not have another resumption ticket, 
> it must go through the full TLS handshake again.  The current implementation 
> in JDK 23 and below, only sends and store one resumption ticket.
> 
> The number of resumption tickets a server can send should be configurable by 
> the application developer or administrator. [RFC 
> 8446](https://www.rfc-editor.org/rfc/rfc8446) does not specify a default 
> value.  A system property called `jdk.tls.server.newSessionTicketCount` 
> allows the user to change the number of resumption tickets sent by the 
> server.  If this property is not set or given an invalid value, the default 
> value of 3 is used. Further details are in the CSR.
> 
> A large portion of the changeset is on the client side by changing the 
> caching system used by TLS.  It creates a new `CacheEntry<>` type called 
> `QueueCacheEntry<>` that will store multiple values for a Map entry.

src/java.base/share/classes/sun/security/ssl/SSLConfiguration.java line 202:

> 200:         if (nstServerCount == null || nstServerCount < 1 ||
> 201:             nstServerCount > 10) {
> 202:             serverNewSessionTicketCount = 3;

I'm always on the fence about this, but do you think it is worthwhile to put a 
debug log message here so folks can tell why their value is getting altered to 
a default 3?  If we don't do it for other props then it's probably not worth 
it, but I thought I'd ask.

src/java.base/share/classes/sun/security/ssl/SSLSessionImpl.java line 503:

> 501:                 this.preSharedKey = new SecretKeySpec(b, alg);
> 502:                 // Get identity len
> 503:                 i = buf.get();

Given that this is just a small change to a large function it may not be 
important to change, but a lot of these X-byte lengths followed by arrays might 
be simplified with Record.getBytes8 or the other similar routines that handle 
longer length fields.  But you wouldn't end up with a null byte[] when the 
length is zero, so that's a change, not necessarily a down-side.

src/java.base/share/classes/sun/security/util/Cache.java line 683:

> 681: 
> 682:         // Limit the number of queue entries.
> 683:         private static final int MAXQUEUESIZE = 10;

What do you think about making this tunable through the constructor, perhaps 
with a default value of 10?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/19465#discussion_r1626171765
PR Review Comment: https://git.openjdk.org/jdk/pull/19465#discussion_r1626184113
PR Review Comment: https://git.openjdk.org/jdk/pull/19465#discussion_r1628114149

Reply via email to