Thanks, I've created it through bugreport.java.com ( internal review ID : 9059057)
Regards, Amir On Tue, Jan 22, 2019 at 12:53 PM Xuelei Fan <xuelei....@oracle.com> wrote: > On 1/21/2019 1:29 PM, Amir Khassaia wrote: > > Thanks Xuelei, > Do you mean to create an RFE at openjdk https://bugs.openjdk.java.net/ ? > > Yes if you have an OpenJDK account. Otherwise, please use > bugreport.java.com > > Thanks, > > Xuelei > > > > On Tue, Jan 22, 2019 at 5:02 AM Xuelei Fan <xuelei....@oracle.com> wrote: > >> Hi Amir, >> >> I can see the problem for incompatible impl. Would you mind submit an >> OpenJDK enhancement for a workaround? >> >> Thanks & Regards, >> >> Xuelei >> On 1/20/2019 4:10 PM, Amir Khassaia wrote: >> >> Xuelei, >> >> I have a sample socket client for the device TLS issue but its not very >> helpful as any socket client created on top of JDK will do, the last >> problem was apparent only when talking to a specific hardware device which >> refused to negotiate TLS session (I've seen several odd TLS implementations >> that were intolerant to Java changes in various ways over the years and >> compatibility could always be assured through config changes, this time >> around less so). >> >> Some of the hardware TLS stacks can range from small oddities to being >> completely broken by small changes as they can contain outdated and poorly >> implemented TLS stacks that are very sensitive so even a small change can >> break them and thats why its always important to have levers provided to >> control almost every aspect of the handshake. >> >> I have a sample in my gist ( >> https://gist.github.com/amir-khassaia/04347ca88526f4b958b3326968a905c0), >> apologies its in Kotlin. When ran with java 8, 9, 10 there were no issues. >> With java 11 this worked on most devices but I've had a device at a remote >> location that was not in my control that I've had to diagnose the handshake >> failure on using java 11 it was intolerant to TLS 1.2 client hello from >> Java 11 but fine with TLS 1.1 as the new extensions are not present. It >> would be fine with TLS 1.2 client hello from Java 10 and earlier as I >> mentioned. >> >> Javax.net.debug output >> ------------------------------- >> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.395 >> AEDT|SSLCipher.java:437|jdk.tls.keyLimits: entry = AES/GCM/NoPadding >> KeyUpdate 2^37. AES/GCM/NOPADDING:KEYUPDATE = 137438953472 >> javax.net.ssl|WARNING|01|main|2019-01-08 13:40:14.433 >> AEDT|ServerNameExtension.java:255|Unable to indicate server name >> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.433 >> AEDT|SSLExtensions.java:235|Ignore, context unavailable extension: >> server_name >> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.433 >> AEDT|SSLExtensions.java:235|Ignore, context unavailable extension: >> status_request >> javax.net.ssl|WARNING|01|main|2019-01-08 13:40:14.443 >> AEDT|SignatureScheme.java:282|Signature algorithm, ed25519, is not >> supported by the underlying providers >> javax.net.ssl|WARNING|01|main|2019-01-08 13:40:14.444 >> AEDT|SignatureScheme.java:282|Signature algorithm, ed448, is not supported >> by the underlying providers >> javax.net.ssl|INFO|01|main|2019-01-08 13:40:14.449 >> AEDT|AlpnExtension.java:161|No available application protocols >> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.449 >> AEDT|SSLExtensions.java:235|Ignore, context unavailable extension: >> application_layer_protocol_negotiation >> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.450 >> AEDT|SSLExtensions.java:235|Ignore, context unavailable extension: >> status_request_v2 >> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.453 >> AEDT|ClientHello.java:651|Produced ClientHello handshake message ( >> "ClientHello": { >> "client version" : "TLSv1.2", >> "random" : "1A BA E8 FC 59 00 AB DF 9A 1A 07 94 24 7F 34 >> 3D 0B D2 7D 10 72 52 54 CD 44 43 62 E8 8B 42 C6 68", >> "session id" : "", >> "cipher suites" : >> "[TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(0xC023), >> TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(0xC027), >> TLS_RSA_WITH_AES_128_CBC_SHA256(0x003C), >> TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(0xC029), >> TLS_RSA_WITH_AES_128_CBC_SHA(0x002F)]", >> "compression methods" : "00", >> "extensions" : [ >> "supported_groups (10)": { >> "versions": [secp256r1, secp384r1, secp521r1, secp160k1] >> }, >> "ec_point_formats (11)": { >> "formats": [uncompressed] >> }, >> "signature_algorithms (13)": { >> "signature schemes": [ecdsa_secp256r1_sha256, >> ecdsa_secp384r1_sha384, ecdsa_secp512r1_sha512, rsa_pss_rsae_sha256, >> rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, >> rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, >> rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, >> ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1, rsa_md5] >> }, >> "signature_algorithms_cert (50)": { >> "signature schemes": [ecdsa_secp256r1_sha256, >> ecdsa_secp384r1_sha384, ecdsa_secp512r1_sha512, rsa_pss_rsae_sha256, >> rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, >> rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, >> rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, >> ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1, rsa_md5] >> }, >> "extended_master_secret (23)": { >> <empty> >> }, >> "supported_versions (43)": { >> "versions": [TLSv1.2, TLSv1.1] >> }, >> "renegotiation_info (65,281)": { >> "renegotiated connection": [<no renegotiated connection>] >> } >> ] >> } >> ) >> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.455 >> AEDT|Alert.java:232|Received alert message ( >> "Alert": { >> "level" : "fatal", >> "description": "handshake_failure" >> } >> ) >> javax.net.ssl|ERROR|01|main|2019-01-08 13:40:14.456 >> AEDT|TransportContext.java:313|Fatal (HANDSHAKE_FAILURE): Received fatal >> alert: handshake_failure ( >> "throwable" : { >> javax.net.ssl.SSLHandshakeException: Received fatal alert: >> handshake_failure >> at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128) >> at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) >> at >> java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308) >> at >> java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:279) >> at >> java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181) >> at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164) >> at >> java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152) >> at >> java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063) >> at >> java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402) >> at SslSocketClient.main(SslSocketClient.kt:47)} >> >> ) >> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.457 >> AEDT|SSLSocketImpl.java:1361|close the underlying socket >> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.457 >> AEDT|SSLSocketImpl.java:1380|close the SSL connection (initiative) >> Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received >> fatal alert: handshake_failure >> at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128) >> at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) >> at >> java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308) >> at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:279) >> at >> java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181) >> at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164) >> at >> java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152) >> at >> java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063) >> at >> java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402) >> at SslSocketClient.main(SslSocketClient.kt:47) >> >> >> >> >> Wireshark TLS 1.2 Java 8 client hello >> ------------------------------------------------- >> Secure Sockets Layer >> TLSv1.2 Record Layer: Handshake Protocol: Client Hello >> Content Type: Handshake (22) >> Version: TLS 1.2 (0x0303) >> Length: 157 >> Handshake Protocol: Client Hello >> Handshake Type: Client Hello (1) >> Length: 153 >> Version: TLS 1.2 (0x0303) >> Random: 5c34044c709feae39585e4db8e41b0170fbf9fa428b38941... >> GMT Unix Time: Jan 8, 2019 13:00:44.000000000 AUS >> Eastern Daylight Time >> Random Bytes: >> 709feae39585e4db8e41b0170fbf9fa428b38941983ddb53... >> Session ID Length: 0 >> Cipher Suites Length: 44 >> Cipher Suites (22 suites) >> Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 >> (0xc023) >> Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 >> (0xc027) >> Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c) >> Cipher Suite: TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 >> (0xc025) >> Cipher Suite: TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 >> (0xc029) >> Cipher Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x0067) >> Cipher Suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 (0x0040) >> Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA >> (0xc009) >> Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) >> Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f) >> Cipher Suite: TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA (0xc004) >> Cipher Suite: TLS_ECDH_RSA_WITH_AES_128_CBC_SHA (0xc00e) >> Cipher Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x0033) >> Cipher Suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA (0x0032) >> Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 >> (0xc02b) >> Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 >> (0xc02f) >> Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c) >> Cipher Suite: TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 >> (0xc02d) >> Cipher Suite: TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 >> (0xc031) >> Cipher Suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x009e) >> Cipher Suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 (0x00a2) >> Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV (0x00ff) >> Compression Methods Length: 1 >> Compression Methods (1 method) >> Compression Method: null (0) >> Extensions Length: 68 >> Extension: supported_groups (len=22) >> Type: supported_groups (10) >> Length: 22 >> Supported Groups List Length: 20 >> Supported Groups (10 groups) >> Supported Group: secp256r1 (0x0017) >> Supported Group: secp384r1 (0x0018) >> Supported Group: secp521r1 (0x0019) >> Supported Group: sect283k1 (0x0009) >> Supported Group: sect283r1 (0x000a) >> Supported Group: sect409k1 (0x000b) >> Supported Group: sect409r1 (0x000c) >> Supported Group: sect571k1 (0x000d) >> Supported Group: sect571r1 (0x000e) >> Supported Group: secp256k1 (0x0016) >> Extension: ec_point_formats (len=2) >> Type: ec_point_formats (11) >> Length: 2 >> EC point formats Length: 1 >> Elliptic curves point formats (1) >> EC point format: uncompressed (0) >> Extension: signature_algorithms (len=28) >> Type: signature_algorithms (13) >> Length: 28 >> Signature Hash Algorithms Length: 26 >> Signature Hash Algorithms (13 algorithms) >> Signature Algorithm: ecdsa_secp521r1_sha512 (0x0603) >> Signature Hash Algorithm Hash: SHA512 (6) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: rsa_pkcs1_sha512 (0x0601) >> Signature Hash Algorithm Hash: SHA512 (6) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: ecdsa_secp384r1_sha384 (0x0503) >> Signature Hash Algorithm Hash: SHA384 (5) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: rsa_pkcs1_sha384 (0x0501) >> Signature Hash Algorithm Hash: SHA384 (5) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: ecdsa_secp256r1_sha256 (0x0403) >> Signature Hash Algorithm Hash: SHA256 (4) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: rsa_pkcs1_sha256 (0x0401) >> Signature Hash Algorithm Hash: SHA256 (4) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: SHA256 DSA (0x0402) >> Signature Hash Algorithm Hash: SHA256 (4) >> Signature Hash Algorithm Signature: DSA (2) >> Signature Algorithm: SHA224 ECDSA (0x0303) >> Signature Hash Algorithm Hash: SHA224 (3) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: SHA224 RSA (0x0301) >> Signature Hash Algorithm Hash: SHA224 (3) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: SHA224 DSA (0x0302) >> Signature Hash Algorithm Hash: SHA224 (3) >> Signature Hash Algorithm Signature: DSA (2) >> Signature Algorithm: ecdsa_sha1 (0x0203) >> Signature Hash Algorithm Hash: SHA1 (2) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: rsa_pkcs1_sha1 (0x0201) >> Signature Hash Algorithm Hash: SHA1 (2) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: SHA1 DSA (0x0202) >> Signature Hash Algorithm Hash: SHA1 (2) >> Signature Hash Algorithm Signature: DSA (2) >> Extension: extended_master_secret (len=0) >> Type: extended_master_secret (23) >> Length: 0 >> >> >> >> Wireshark Java 11 TLS 1.2 Client hello >> ---------------------------------------------------- >> Secure Sockets Layer >> TLSv1.2 Record Layer: Handshake Protocol: Client Hello >> Content Type: Handshake (22) >> Version: TLS 1.2 (0x0303) >> Length: 185 >> Handshake Protocol: Client Hello >> Handshake Type: Client Hello (1) >> Length: 181 >> Version: TLS 1.2 (0x0303) >> Random: 37f32691301b6b9d45bb62c6268915819881b8ebd95f152c... >> GMT Unix Time: Sep 30, 1999 19:00:01.000000000 AUS >> Eastern Standard Time >> Random Bytes: >> 301b6b9d45bb62c6268915819881b8ebd95f152c41c7e483... >> Session ID Length: 0 >> Cipher Suites Length: 10 >> Cipher Suites (5 suites) >> Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 >> (0xc023) >> Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 >> (0xc027) >> Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c) >> Cipher Suite: TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 >> (0xc029) >> Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f) >> Compression Methods Length: 1 >> Compression Methods (1 method) >> Compression Method: null (0) >> Extensions Length: 130 >> Extension: supported_groups (len=10) >> Type: supported_groups (10) >> Length: 10 >> Supported Groups List Length: 8 >> Supported Groups (4 groups) >> Supported Group: secp256r1 (0x0017) >> Supported Group: secp384r1 (0x0018) >> Supported Group: secp521r1 (0x0019) >> Supported Group: secp160k1 (0x000f) >> Extension: ec_point_formats (len=2) >> Type: ec_point_formats (11) >> Length: 2 >> EC point formats Length: 1 >> Elliptic curves point formats (1) >> EC point format: uncompressed (0) >> Extension: signature_algorithms (len=42) >> Type: signature_algorithms (13) >> Length: 42 >> Signature Hash Algorithms Length: 40 >> Signature Hash Algorithms (20 algorithms) >> Signature Algorithm: ecdsa_secp256r1_sha256 (0x0403) >> Signature Hash Algorithm Hash: SHA256 (4) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: ecdsa_secp384r1_sha384 (0x0503) >> Signature Hash Algorithm Hash: SHA384 (5) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: ecdsa_secp521r1_sha512 (0x0603) >> Signature Hash Algorithm Hash: SHA512 (6) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: rsa_pss_rsae_sha256 (0x0804) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (4) >> Signature Algorithm: rsa_pss_rsae_sha384 (0x0805) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (5) >> Signature Algorithm: rsa_pss_rsae_sha512 (0x0806) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (6) >> Signature Algorithm: rsa_pss_pss_sha256 (0x0809) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (9) >> Signature Algorithm: rsa_pss_pss_sha384 (0x080a) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (10) >> Signature Algorithm: rsa_pss_pss_sha512 (0x080b) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (11) >> Signature Algorithm: rsa_pkcs1_sha256 (0x0401) >> Signature Hash Algorithm Hash: SHA256 (4) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: rsa_pkcs1_sha384 (0x0501) >> Signature Hash Algorithm Hash: SHA384 (5) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: rsa_pkcs1_sha512 (0x0601) >> Signature Hash Algorithm Hash: SHA512 (6) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: SHA256 DSA (0x0402) >> Signature Hash Algorithm Hash: SHA256 (4) >> Signature Hash Algorithm Signature: DSA (2) >> Signature Algorithm: SHA224 ECDSA (0x0303) >> Signature Hash Algorithm Hash: SHA224 (3) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: SHA224 RSA (0x0301) >> Signature Hash Algorithm Hash: SHA224 (3) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: SHA224 DSA (0x0302) >> Signature Hash Algorithm Hash: SHA224 (3) >> Signature Hash Algorithm Signature: DSA (2) >> Signature Algorithm: ecdsa_sha1 (0x0203) >> Signature Hash Algorithm Hash: SHA1 (2) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: rsa_pkcs1_sha1 (0x0201) >> Signature Hash Algorithm Hash: SHA1 (2) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: SHA1 DSA (0x0202) >> Signature Hash Algorithm Hash: SHA1 (2) >> Signature Hash Algorithm Signature: DSA (2) >> Signature Algorithm: MD5 RSA (0x0101) >> Signature Hash Algorithm Hash: MD5 (1) >> Signature Hash Algorithm Signature: RSA (1) >> Extension: signature_algorithms_cert (len=42) >> Type: signature_algorithms_cert (50) >> Length: 42 >> Signature Hash Algorithms Length: 40 >> Signature Hash Algorithms (20 algorithms) >> Signature Algorithm: ecdsa_secp256r1_sha256 (0x0403) >> Signature Hash Algorithm Hash: SHA256 (4) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: ecdsa_secp384r1_sha384 (0x0503) >> Signature Hash Algorithm Hash: SHA384 (5) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: ecdsa_secp521r1_sha512 (0x0603) >> Signature Hash Algorithm Hash: SHA512 (6) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: rsa_pss_rsae_sha256 (0x0804) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (4) >> Signature Algorithm: rsa_pss_rsae_sha384 (0x0805) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (5) >> Signature Algorithm: rsa_pss_rsae_sha512 (0x0806) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (6) >> Signature Algorithm: rsa_pss_pss_sha256 (0x0809) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (9) >> Signature Algorithm: rsa_pss_pss_sha384 (0x080a) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (10) >> Signature Algorithm: rsa_pss_pss_sha512 (0x080b) >> Signature Hash Algorithm Hash: Unknown (8) >> Signature Hash Algorithm Signature: Unknown (11) >> Signature Algorithm: rsa_pkcs1_sha256 (0x0401) >> Signature Hash Algorithm Hash: SHA256 (4) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: rsa_pkcs1_sha384 (0x0501) >> Signature Hash Algorithm Hash: SHA384 (5) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: rsa_pkcs1_sha512 (0x0601) >> Signature Hash Algorithm Hash: SHA512 (6) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: SHA256 DSA (0x0402) >> Signature Hash Algorithm Hash: SHA256 (4) >> Signature Hash Algorithm Signature: DSA (2) >> Signature Algorithm: SHA224 ECDSA (0x0303) >> Signature Hash Algorithm Hash: SHA224 (3) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: SHA224 RSA (0x0301) >> Signature Hash Algorithm Hash: SHA224 (3) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: SHA224 DSA (0x0302) >> Signature Hash Algorithm Hash: SHA224 (3) >> Signature Hash Algorithm Signature: DSA (2) >> Signature Algorithm: ecdsa_sha1 (0x0203) >> Signature Hash Algorithm Hash: SHA1 (2) >> Signature Hash Algorithm Signature: ECDSA (3) >> Signature Algorithm: rsa_pkcs1_sha1 (0x0201) >> Signature Hash Algorithm Hash: SHA1 (2) >> Signature Hash Algorithm Signature: RSA (1) >> Signature Algorithm: SHA1 DSA (0x0202) >> Signature Hash Algorithm Hash: SHA1 (2) >> Signature Hash Algorithm Signature: DSA (2) >> Signature Algorithm: MD5 RSA (0x0101) >> Signature Hash Algorithm Hash: MD5 (1) >> Signature Hash Algorithm Signature: RSA (1) >> Extension: extended_master_secret (len=0) >> Type: extended_master_secret (23) >> Length: 0 >> Extension: supported_versions (len=5) >> Type: supported_versions (43) >> Length: 5 >> Supported Versions length: 4 >> Supported Version: TLS 1.2 (0x0303) >> Supported Version: TLS 1.1 (0x0302) >> Extension: renegotiation_info (len=1) >> Type: renegotiation_info (65281) >> Length: 1 >> Renegotiation Info extension >> Renegotiation info extension length: 0 >> >> >> >> >> >> >> On Mon, Jan 21, 2019 at 10:37 AM Xuelei Fan <xuelei....@oracle.com> >> wrote: >> >>> Hi Amir, >>> >>> Normally, the extension should have no impact if it cannot be recognized >>> by the server. It's good to be able to disable extensions if not >>> needed. I need to evaluate the priority of it although. Did you have a >>> simple test code that I can reproduce the issue? >>> >>> Thanks, >>> >>> Xuelei >>> On 1/20/2019 3:03 PM, Amir Khassaia wrote: >>> >>> Greetings Xuelei, >>> To follow up on this, the certificate in the connection is a red herring >>> and not important. It's actually a very unusual behaviour by >>> talk.google.com endpoint to encapsulate an error message inside a >>> certificate. >>> >>> As per the output I included: >>> >>> *"certificate" : { >>> *>* "version" : "v3", >>> *>* "serial number" : "00 90 76 89 18 E9 33 93 A0", >>> *>* "signature algorithm": "SHA256withRSA", >>> *>* "issuer" : "CN=invalid2.invalid, OU="No SNI provided; >>> *>* please fix your client."", >>> *>* "not before" : "2015-01-01 11:00:00.000 AEDT", >>> *>* "not after" : "2030-01-01 11:00:00.000 AEDT", >>> *>* "subject" : "CN=invalid2.invalid, OU="No SNI provided; >>> *>* please fix your client."",* >>> >>> This certificate simply masks the TLS interoperability issue as an >>> untrusted certificate issue. >>> >>> The fact is, some of the extensions sent by JSSE are changes to TLS 1.2 >>> to support TLS 1.3, this however affects some clients adversely in practice >>> and usually JDK provides properties to turn new enhancements off and work >>> around such behaviour, for the extensions I mentioned this is not provided >>> and hence they are always sent for client sockets unless TLSv1.2 is not in >>> use. >>> >>> The impact to us is that upgrading to JDK11 means for some endpoints or >>> devices that are not 100% compliant to the spec the security is reduced as >>> we have to now work around to drop connections to these to TLSv1.1 or >>> TLS1.0 or not to move to Java 11 at all. >>> >>> My request is simply to have all of the new extensions configurable on >>> individual basis so that they can be turned off if needed for compatibility >>> just like most other security enhancements that were delivered in the past. >>> >>> It appears some of the issues can come from >>> >>> - inclusion of RSASSA-PSS alg in TLS 1.2 handshakes but these can >>> disabled at least >>> >>> -signature_algorithms_cert and supported_versions extensions which seem >>> to be hardcoded for TLS 1.2 (I was not able to conclusively identify which >>> of these caused my troubles) >>> >>> https://tools.ietf.org/html/rfc8446#section-1.3 does say that TLS 1.2 >>> clients are affected but in an optional manner.Just today I've encountered >>> another Java 11 interop issue with TLS but this time with a physical device >>> which can have a long shelf life yet running a simple client socket >>> handshake abruptly terminates the connection upon client hello (no >>> server_hello at all), and downgrading the JRE below 11 works fine. I'm >>> including a trace for that as well: javax.net.ssl|DEBUG|01|main|2019-01-08 >>> 13:40:14.395 AEDT|SSLCipher.java:437|jdk.tls.keyLimits: entry = >>> AES/GCM/NoPadding KeyUpdate 2^37. AES/GCM/NOPADDING:KEYUPDATE = 137438953472 >>> >>> javax.net.ssl|WARNING|01|main|2019-01-08 13:40:14.433 >>> AEDT|ServerNameExtension.java:255|Unable to indicate server name >>> >>> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.433 >>> AEDT|SSLExtensions.java:235|Ignore, context unavailable extension: >>> server_name >>> >>> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.433 >>> AEDT|SSLExtensions.java:235|Ignore, context unavailable extension: >>> status_request >>> >>> javax.net.ssl|WARNING|01|main|2019-01-08 13:40:14.443 >>> AEDT|SignatureScheme.java:282|Signature algorithm, ed25519, is not >>> supported by the underlying providers >>> >>> javax.net.ssl|WARNING|01|main|2019-01-08 13:40:14.444 >>> AEDT|SignatureScheme.java:282|Signature algorithm, ed448, is not supported >>> by the underlying providers >>> >>> javax.net.ssl|INFO|01|main|2019-01-08 13:40:14.449 >>> AEDT|AlpnExtension.java:161|No available application protocols >>> >>> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.449 >>> AEDT|SSLExtensions.java:235|Ignore, context unavailable extension: >>> application_layer_protocol_negotiation >>> >>> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.450 >>> AEDT|SSLExtensions.java:235|Ignore, context unavailable extension: >>> status_request_v2 >>> >>> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.453 >>> AEDT|ClientHello.java:651|Produced ClientHello handshake message ( >>> >>> "ClientHello": { >>> >>> "client version" : "TLSv1.2", >>> >>> "random" : "1A BA E8 FC 59 00 AB DF 9A 1A 07 94 24 7F 34 >>> 3D 0B D2 7D 10 72 52 54 CD 44 43 62 E8 8B 42 C6 68", >>> >>> "session id" : "", >>> >>> "cipher suites" : >>> "[TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(0xC023), >>> TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(0xC027), >>> TLS_RSA_WITH_AES_128_CBC_SHA256(0x003C), >>> TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(0xC029), >>> TLS_RSA_WITH_AES_128_CBC_SHA(0x002F)]", >>> >>> "compression methods" : "00", >>> >>> "extensions" : [ >>> >>> "supported_groups (10)": { >>> >>> "versions": [secp256r1, secp384r1, secp521r1, secp160k1] >>> >>> }, >>> >>> "ec_point_formats (11)": { >>> >>> "formats": [uncompressed] >>> >>> }, >>> >>> "signature_algorithms (13)": { >>> >>> "signature schemes": [ecdsa_secp256r1_sha256, >>> ecdsa_secp384r1_sha384, ecdsa_secp512r1_sha512, rsa_pss_rsae_sha256, >>> rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, >>> rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, >>> rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, >>> ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1, rsa_md5] >>> >>> }, >>> >>> "signature_algorithms_cert (50)": { >>> >>> "signature schemes": [ecdsa_secp256r1_sha256, >>> ecdsa_secp384r1_sha384, ecdsa_secp512r1_sha512, rsa_pss_rsae_sha256, >>> rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, >>> rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, >>> rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, >>> ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1, rsa_md5] >>> >>> }, >>> >>> "extended_master_secret (23)": { >>> >>> <empty> >>> >>> }, >>> >>> "supported_versions (43)": { >>> >>> "versions": [TLSv1.2, TLSv1.1] >>> >>> }, >>> >>> "renegotiation_info (65,281)": { >>> >>> "renegotiated connection": [<no renegotiated connection>] >>> >>> } >>> >>> ] >>> >>> } >>> >>> ) >>> >>> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.455 >>> AEDT|Alert.java:232|Received alert message ( >>> >>> "Alert": { >>> >>> "level" : "fatal", >>> >>> "description": "handshake_failure" >>> >>> } >>> >>> ) >>> >>> javax.net.ssl|ERROR|01|main|2019-01-08 13:40:14.456 >>> AEDT|TransportContext.java:313|Fatal (HANDSHAKE_FAILURE): Received fatal >>> alert: handshake_failure ( >>> >>> "throwable" : { >>> >>> javax.net.ssl.SSLHandshakeException: Received fatal alert: >>> handshake_failure >>> >>> at >>> java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128) >>> >>> at >>> java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) >>> >>> at >>> java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308) >>> >>> at >>> java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:279) >>> >>> at >>> java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181) >>> >>> at >>> java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164) >>> >>> at >>> java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152) >>> >>> at >>> java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063) >>> >>> at >>> java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402) >>> >>> at SslSocketClient.main(SslSocketClient.kt:47)} >>> >>> >>> ) >>> >>> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.457 >>> AEDT|SSLSocketImpl.java:1361|close the underlying socket >>> >>> javax.net.ssl|DEBUG|01|main|2019-01-08 13:40:14.457 >>> AEDT|SSLSocketImpl.java:1380|close the SSL connection (initiative) >>> >>> Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received >>> fatal alert: handshake_failure >>> >>> at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128) >>> >>> at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) >>> >>> at >>> java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308) >>> >>> at >>> java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:279) >>> >>> at >>> java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181) >>> >>> at >>> java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164) >>> >>> at >>> java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152) >>> >>> at >>> java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063) >>> >>> at >>> java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402) >>> >>> at SslSocketClient.main(SslSocketClient.kt:47) >>> >>> >>> >>> >>> I've sent my reply earlier but neither got it posted nor denied >>> notification so trying again. >>> >>>