Hi,

maybe two points.

1) Older lotus notes server have the problem.
2) The problem can be solved if you disable TLSv1.3 or even TLSv1.2
3) Maybe it would be an good idea to build an set of client hello's with different options.      Or even an generator. Than you send if and check the result since the servers with problem      only reply with an ssl alert. So you can check it without an ssl engine or jdk build


Gruß Thomas

Am 13.02.2019 um 22:44:31 schrieb Xuelei Fan:
Hi Amir,

Could you build OpenJDK by yourself?  If it is doable, I could send your a patch to disable the extension so that you can confirm if and which extension is the underlying problem.

Thanks,
Xuelei


On 2/13/2019 1:16 PM, Amir Khassaia wrote:
Hi Xuelei,
There were 2 distinct cases of change of behaviour.

  * The "CN=invalid2.invalid, OU="No SNI provided" reliably works
    without SNI in Java 8 but is indeed fixed by having an SNI included
    which perhaps was needed all along. This one is reported by XMPP/TLS
    connection from talk.google.com:5222 <http://talk.google.com:5222>
  * The aborted handshake case (client_hello traces that I've provided)
    this happened with a hardware device which was replicable with an
    SSL socket handshake program that I referenced in the gist.
    Unfortunately replication requires a specific device model so it
    wont be possible to see it for yourself. The workaround there was to
    either downgrade JRE to < 11 or to switch JRE globally to use TLS
    1.0 or TLS 1.1 via the system property. This is where your proposed
    enhancement will be of great help as it will allow a per connection
    type decision.


On Wed, Feb 13, 2019 at 3:01 PM Xuelei Fan <xuelei....@oracle.com <mailto:xuelei....@oracle.com>> wrote:

    Hi Amir,

    It should be rare now the a TLS vendor cannot ignore unknown extensions.

      > "issuer": "CN=invalid2.invalid, OU="No SNI provided;
      > please fix your client."",
    The error message encapsulated in the certificate does not sound right
    to me.  Is it caused by the absence of SNI extension?

    Did you have a test case that I can reproduce the problem?

    Thanks & Regards,
    Xuelei


    On 1/7/2019 9:27 PM, Amir Khassaia wrote:
     > Xuelei,
     > The certificate in the connection is a red herring and not
    important.
     > It's actually a very unusual behaviour by talk.google.com
    <http://talk.google.com>
     > <http://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-0813:40:14.395 AEDT|SSLCipher.java:437|jdk.tls.keyLimits:   entry =
    AES/GCM/NoPadding KeyUpdate2^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)
     >
     >
     >
     >

Reply via email to