OpenJDK Java 11.0.30 May Cause TLS (SSL) Handshake Failure Exception Due To Disabled TLS_RSA Cipher Suites


Issue

Boomi runtimes upgrade their Java builds/versions regularly to maintain the latest security enhancements, bug fixes, performance, stability, and long-term supportability.  However, security is the most important reason for upgrading, to eliminate Java vulnerabilities discovered over the various versions used in the internet community.

After an Java upgrade to OpenJDK 11.0.30.7.1, a customer encountered the following TLS/SSL handshake exception:

... JDBCDriver](500164) Error initialized or created transport for authentication: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure.

The connector in this case was a JDBC connection, however, this could occur for any connector that uses TLS as its security layer for authentication and encryption, where the server has chosen a TLS_RSA_* cipher.

For REST or HTTP client connectors, you may see this exception:

Embedded message: Received fatal alert: handshake_failure OR the following partial jstack trace:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:353)
	at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:293)
	at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:192)
	at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172)
	at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1511)
	at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1421)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:456)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:427)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:436)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:384)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)

Cause

OpenJDK restricts TLS_RSA algorithms in version 11.0.30. This release disables all TLS_RSA cipher suites by default to improve security, as they do not provide forward secrecy and are increasingly rare in modern environments, according to the Oracle 11.0.30 Release Notes.

Key Changes in 11.0.30

The TLS Rivest-Shamir-Adleman (TLS_RSA) cipher suites do not preserve forward secrecy and they are rarely used. OpenJDK 11.0.30 disables the TLS_RSA cipher suites by adding the TLS_RSA_* option to the jdk.tls.disabledAlgorithms security property in the java.security configuration file. If you attempt to use the TLS_RSA cipher suites, OpenJDK 11.0.30 releases now throws an SSLHandshakeException error.

If you want to continue using the TLS_RSA cipher suites, you can remove TLS_RSA_* from the jdk.tls.disabledAlgorithms security property either by modifying the java.security configuration file or by using the java.security.properties system property.  See more details in the Solutions section.

RSA cipher suites that use DES, 3DES, RC4, or NULL were disabled previously. Commonly used suites, such as TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, and various AES-CBC variants, are now disabled by default:

Environment

The Boomi runtime is the execution engine that actually runs your integration processes. Boomi's runtime is built entirely on Java, and depends upon the Java build for its security implementation, to address exposed Java vulnerabilities, (i.e., remove or restrict older JVM versions using TLS versions, and weaker cipher suites and algorithms, etc.), JVM performance improvements, stability and bug fixes, and the maintain compatibility with newer server TLS and cryptography requirements.

Therefore, Java changes, mentioned in the Cause section above, may greatly affect the Boomi runtime and its connectors and process integrations.

Solution

To re-enable TLS_RSA_* ciphers in the Boomi runtime Java, edit the java.security file as follows.

DISCLAIMER:
Continued use of the TLS_RSA cipher suites is at your own risk.


Step 1:  Locate the Boomi runtime JRE location. 

The JRE path is found the Manage->Runtime Management-> ... [Java Information] OR [Startup Properties] ->Java Home value.  

Step 2:  Locate the java.security file in the Java Home/conf/security folder/directory (or Java_Home/lib/security/java.security for older versions):  

Step 3: Edit the java.security file

In the editor, locate the jdk.tls.disabledAlgorithms property as shown below:

Original Java 11.0.30 java.security file:

# Example:
#   jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048, \
#       rsa_pkcs1_sha1, secp224r1, TLS_RSA_*
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, \
    MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    ECDH, TLS_RSA_*, \
    include jdk.disabled.namedCurves

Step 4:  Note the TLS_RSA_* included in the list of disabled Algorithms and remove the "TLS_RSA_*," for inclusion of the TLS_RSA_* ciphers, offered in the TLS handshake/Client Hello message. 

Note also that by default, TLSv1 and TLSv1.1 are disabled in this release as well.

Now the jdk.tls.disabledAlgorithms property values should be similar to below:

Modified Java 11.0.30 java.security file to include TLS_RSA_* ciphers

# Example:
#   jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048, \
#       rsa_pkcs1_sha1, secp224r1, TLS_RSA_*
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, \
    MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    ECDH, \
    include jdk.disabled.namedCurves

Step 5:  Save the java.security file after the change is made.

Step 6:  Restart the Boomi runtime

Step 7: Test or execute the process or connector that failed previously after Java 11.0.30 was applied to the runtime environment.


References:
Oracle OpenJDK 11.0.30 Release Notes
RedHat OpenJDK 11.0.30 Build Release Notes
OpenJDK Release 11.0.30