On Tue, 2 Dec 2025 14:29:34 GMT, Sergey Chernyshev <[email protected]> 
wrote:

>> Hi all,
>> 
>> Let me propose a fix and a test case for JDK-8369950.
>> 
>> The failure reproduces with BCJSSE provider and all implementations of 
>> SSLSocket other than SSLSocketImpl.
>> 
>> In the test case an anonymous wrapper is used, over the standard 
>> SSLSocketImpl, to simulate an external JSSE provider. The test case shows 
>> the same behavior as in BCJSSE (failure due to non-LDH ASCII characters in 
>> the SNI host name).
>> 
>> The fix avoids constructing SNIHostName when the URL host name is an IPv4 or 
>> IPv6 literal address. Other than that, all other FQDN host names that have 
>> invalid characters (non-LDH ASCII characters) still produce that exception.
>> 
>> SNIHostName, as defined in
>> https://github.com/openjdk/jdk/blob/873f8a696fa45c7d94a164be20cf3c797ce7f2a6/src/java.base/share/classes/javax/net/ssl/SNIHostName.java#L44-L66
>> 
>> has the fully qualified DNS hostname of the server. As follows from the 
>> section 3, "Server Name Indication", RFC 6066, `Literal IPv4 and IPv6 
>> addresses are not permitted in "HostName"`.
>> 
>> The fix mirrors the behavior of SSLSocketImpl, that avoids constructing the 
>> SNIHostName from literal addresses. Please see
>> 
>> https://github.com/openjdk/jdk/blob/873f8a696fa45c7d94a164be20cf3c797ce7f2a6/src/java.base/share/classes/sun/security/ssl/Utilities.java#L110-L116
>> 
>> Testing:
>> - standard jtreg tests goups showed no regressions
>> - the new test passes with the fix and fails otherwise
>> - passes also with BCJSSE in FIPS and standard mode 
>> 
>> <details><summary> BCJSSE standard</summary>
>> 
>> 
>> STDOUT:
>> STDERR:
>> Dez. 01, 2025 2:44:02 PM org.bouncycastle.jsse.provider.PropertyUtils 
>> getBooleanSecurityProperty
>> INFORMATION: Found boolean security property [keystore.type.compat]: true
>> Dez. 01, 2025 2:44:02 PM org.bouncycastle.jsse.provider.PropertyUtils 
>> getStringSecurityProperty
>> INFORMATION: Found string security property [jdk.tls.disabledAlgorithms]: 
>> SSLv3, TLSv1, TLSv1.1, DTLSv1.0, RC4, DES, MD5withRSA, DH keySize < 1024, EC 
>> keySize < 224, 3DES_EDE_CBC, anon, NULL, ECDH, TLS_RSA_*, rsa_pkcs1_sha1 
>> usage HandshakeSignature, ecdsa_sha1 usage HandshakeSignature, dsa_sha1 
>> usage HandshakeSignature
>> Dez. 01, 2025 2:44:02 PM 
>> org.bouncycastle.jsse.provider.DisabledAlgorithmConstraints create
>> WARNUNG: Ignoring unsupported entry in 'jdk.tls.disabledAlgorithms': 
>> rsa_pkcs1_sha1 usage HandshakeSignature
>> Dez. 01, 2025 2:44:02 PM 
>> org.bouncycastle.jsse.provider.DisabledAlgorithmConstraints create
>> WARNUNG: Ignoring unsupported entry in 'jdk.tl...
>
> Sergey Chernyshev has updated the pull request incrementally with two 
> additional commits since the last revision:
> 
>  - addressed more review comments
>  - addressed review comments

Just a few minor comments

test/jdk/javax/net/ssl/HttpsURLConnection/SubjectAltNameIPv6.java line 60:

> 58:      * Is the server ready to serve?
> 59:      */
> 60:     volatile static boolean serverReady = false;

I think this might be better to make this a `CountDownLatch`

test/jdk/javax/net/ssl/HttpsURLConnection/SubjectAltNameIPv6.java line 76:

> 74:         SSLServerSocketFactory sslssf =
> 75:             new SimpleSSLContext().get().getServerSocketFactory();
> 76:         SSLServerSocket sslServerSocket =

Nit: could you please keep the lines under 80 characters long. There are a few 
instances in this file

test/jdk/javax/net/ssl/HttpsURLConnection/SubjectAltNameIPv6.java line 110:

> 108: 
> 109:         SSLSocketFactory sf = new 
> SimpleSSLContext().get().getSocketFactory();
> 110:         URL url = new URL("https://[::1]:"; + serverPort + "/index.html");

Suggestion:

  URL url = 
          new URI("https://[::1]:"; + serverPort + "/index.html").toURL();

test/jdk/javax/net/ssl/HttpsURLConnection/SubjectAltNameIPv6.java line 153:

> 151:     SubjectAltNameIPv6() throws Exception {
> 152:         startServer();
> 153:         startClient();

Do you think it might be better to call doClientSide here directly?

test/jdk/javax/net/ssl/HttpsURLConnection/SubjectAltNameIPv6.java line 165:

> 163: 
> 164:     void startServer() throws Exception {
> 165:         serverThread = new Thread() {

Suggestion:

        serverThread = new Thread(() -> {

What do you think?

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

PR Review: https://git.openjdk.org/jdk/pull/28577#pullrequestreview-3530780325
PR Review Comment: https://git.openjdk.org/jdk/pull/28577#discussion_r2581743338
PR Review Comment: https://git.openjdk.org/jdk/pull/28577#discussion_r2581725471
PR Review Comment: https://git.openjdk.org/jdk/pull/28577#discussion_r2581716748
PR Review Comment: https://git.openjdk.org/jdk/pull/28577#discussion_r2581731969
PR Review Comment: https://git.openjdk.org/jdk/pull/28577#discussion_r2581757022

Reply via email to