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)
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
TLS_RSA cipher suites are now explicitly added to the jdk.tls.disabledAlgorithms security property in the java.security configuration file.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.
TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, and various AES-CBC variants, are now disabled by default:TLS_RSA_WITH_AES_256_GCM_SHA384TLS_RSA_WITH_AES_256_CBC_SHA256TLS_RSA_WITH_AES_256_CBC_SHATLS_RSA_WITH_AES_128_GCM_SHA256TLS_RSA_WITH_AES_128_CBC_SHA256TLS_RSA_WITH_AES_128_CBC_SHASSLHandshakeException.*) wildcard, specifically TLS_RSA_*, to more easily disable all suites starting with that prefix. [1, 2, 3, 4]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.
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
References:
Oracle OpenJDK 11.0.30 Release Notes
RedHat OpenJDK 11.0.30 Build Release Notes
OpenJDK Release 11.0.30