Session resumption without server side state was added under
[JDK-8211018](https://bugs.openjdk.org/browse/JDK-8211018).
While it is TLSv1.2 session resumption, the client hello message is being
parsed in SSLSessionImpl for each extensions.
Customer has reported handshake failure and is reproducible locally with
exception NegativeArraySizeExceptions when there is ServerNameIndication with
size > 127.
According to RFC 3546, the host_name limit allowed is 255.
With a sample testcase when the host_name length is > 127, exception is thrown:
javax.net.ssl|DEBUG|71|Thread-1|2025-04-06 17:13:07.278
UTC|ClientHello.java:825|Negotiated protocol version: TLSv1.2
javax.net.ssl|WARNING|71|Thread-1|2025-04-06 17:13:07.281
UTC|SSLSocketImpl.java:1672|handling exception (
"throwable" : {
java.lang.NegativeArraySizeException: -1
at
java.base/sun.security.ssl.SSLSessionImpl.<init>(SSLSessionImpl.java:399)
at
java.base/sun.security.ssl.SessionTicketExtension$T12CHSessionTicketConsumer.consume(SessionTicketExtension.java:468)
e.g.
int l = buf.get();
b = new byte[l]; <-------------------- NegativeArraySizeException thrown here
when > 127
For TLSv1.3, its not an issue until length > 255.
According to RFC 5077, PSK identity length allowed is <0..2^16-1> and so its
value conversion being taken care of under this change.
Master secret is allowed for 48 bytes - master_secret[48], shouldnt be an issue.
-------------
Commit messages:
- 8350830: Values converted incorrectly when reading TLS session tickets
Changes: https://git.openjdk.org/jdk/pull/24535/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24535&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8350830
Stats: 398 lines in 3 files changed: 395 ins; 0 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/24535.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/24535/head:pull/24535
PR: https://git.openjdk.org/jdk/pull/24535