On Wed, 3 Dec 2025 00:42:25 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 one 
> additional commit since the last revision:
> 
>   test that ipv4 literals do not propagate to the server names list

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

> 101:         OutputStream sslOS = sslSocket.getOutputStream();
> 102:         BufferedWriter bw = new BufferedWriter(new 
> OutputStreamWriter(sslOS));
> 103:         bw.write("HTTP/1.1 200 OK\r\n\r\n\r\n");

Suggestion:

        bw.write("HTTP/1.1 200 OK\r\n\r\n");

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

> 103:         bw.write("HTTP/1.1 200 OK\r\n\r\n\r\n");
> 104:         bw.flush();
> 105:         sslSocket.close();

Now that you removed the Thread.sleep, you can't close the socket without 
reading the request off the input stream; it will cause intermittent connection 
reset failures on Windows. You can use the [readOneRequest 
method](https://github.com/openjdk/jdk/blob/530493fed4066b1efcf3ec22253b110495767eca/test/jdk/sun/net/www/http/HttpClient/CookieHttpClientTest.java#L77-L89).

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

> 120:         if (!ready) {
> 121:             throw new RuntimeException("Server timed out.");
> 122:         }

Suggestion:

        serverReady.await();

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28577#discussion_r2583948756
PR Review Comment: https://git.openjdk.org/jdk/pull/28577#discussion_r2583948186
PR Review Comment: https://git.openjdk.org/jdk/pull/28577#discussion_r2583955178

Reply via email to