On Tue, 2 Dec 2025 09:39:24 GMT, Jaikiran Pai <[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...
>
> test/jdk/javax/net/ssl/HttpsURLConnection/SubjectAltNameIPv6.java line 165:
> 
>> 163:      */
>> 164:     SubjectAltNameIPv6() throws Exception {
>> 165:         if (separateServerThread) {
> 
> Are these if/else blocks needed or could we simplify the test to just expect 
> the server and client to run as separate threads?

I spoke to Daniel and I agree with him that it's OK to leave this in current 
form and if needed clean up as a follow up when doing the same for the rest of 
these tests.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28577#discussion_r2580451134

Reply via email to