VOOZH about

URL: https://www.ibm.com/support/pages/node/6411285

⇱ Semeru Runtimes security migration guide


Semeru Runtimes security migration guide

General Page

This guide contains security considerations for users who are migrating from IBM® SDK, Java™ Technology Edition, version 8 to version 11 of the IBM Semeru Runtimes.

IBM Semeru Runtimes security migration guide

IBM SDK, Java Technology Edition, version 8 contains the IBM security implementation. However, version 11 of the IBM Semeru Runtime™ Open Edition and IBM Semeru Runtime™ Certified Edition contain the OpenJDK security implementation. Differences between these implementations might require code changes to your applications.

OpenJDK contains a Java cryptographic implementation that includes TLS v1.3 since JDK11. This protocol is enabled by default and contains significant differences to earlier TLS implementations. For more information about TLS v1.3, including which algorithms are no longer allowed, see JEP 332.

IBM Semeru Runtimes can utilize OpenSSL to enhance cryptographic acceleration. For more information related to this acceleration and behavior see OpenSSL.

The security certificates aolrootca1 and aolrootca2 that were present in IBM SDK, Java Technology Edition, V8 are no longer included.

Note: IBM Semeru Runtimes can leverage FIPS 140-3 capabilities for production workloads. Starting with versions 8.0.352, 11.0.16, and 17.0.4, IBM Semeru Runtimes includes FIPS support, by using the NSS library in Red Hat Enterprise Linux 8 or later. For more information, see FIPS certified cryptography in IBM Semeru Runtimes FIPS.

IBM Semeru Runtime Certified Edition for z/OS

Information in this security migration guide does not apply for the IBM Semeru Runtime Certified Edition for z/OS. Refer to these resources:

Security providers

The OpenJDK security providers have different names to the IBM Security providers. If your application uses hardcoded IBM provider names, you must update your application code. The following table shows the equivalent OpenJDK provider names, their implementation class, and the Java module in which the class belongs. If you want to learn more about the differences between providers, click the links in the IBM Security provider column.

Note that the ikeyman and ikeycmd tools which were available in IBM SDK, Java Technology Edition, version 8, are not available in versions 11 and above of the IBM Semeru Runtimes. Use the Keytool command to perform certificate and key operations.

Also note that, the IBM Key Certificate Management utility (ibmkeycert.jar) is no longer shipped with the IBM Semeru SDKs. As an alternative, for key and certificate management, use one of the following tools:

  • Use zseckeytool utility for JCERACFKS (RACF Software) keystore management
  • Use hwkeytool utility to manage keystores, which contain private keys and their associated X.509 certificate chains
  • Use keytool utility for general use keystore management
  • Use Bouncy Castle for programmatic solutions
IBM Security providerOpenJDK/Oracle security providerImplementation classJava module
IBM JSSE2The SunJSSE provider
IBM JCE
(see Note 1)
The SUN provider
The SunEC Provider
The SunJCE provider
The SunRsaSign provider
IBM JGSSThe sunJGSS provider
IBM Certification PathOpenJDK Certification Path
IBM SASLThe sunSASL provider
IBM JAASOpenJDK JAAS
IBMSecureRandom
(see Note 2)
---
XML Digital Signature
(see Note 3)
The XMLDSig provider
XML Digital Encryption
(see Note 4)
---

Table: IBM security provider to OpenJDK security provider mapping

Notes:

  1. OpenJDK contains an (optional) LGPL native module, which implements part of . For more information, see the file legal/jdk.crypto.ec/ecc.mdd.
  2. OpenJDK does not have an equivalent version of the IBMSecureRandom provider. For alternative functionality, see IBMSecureRandom.
  3. The OpenJDK XML Digital Signature provider and implementation class is identical to the IBM provider (JSR105).
  4. OpenJDK does not implement the Java XML Digital Encryption Specification (JSR 106). If your application uses the IBM security class , you must update your application code to remove it.
  5. OpenJDK allows the use of unsigned third-party cryptographic providers.

JSSE provider differences

If your application uses hardcoded IBM provider, protocol, or algorithm names, you must update your application code.

The following table shows some key differences for JSSE:

Aspect of JSSEIBM SDK, Java Technology Edition, version 8IBM Semeru Runtimes, version 11
IBM JSSE provider
IBM HTTPS protocol handler
KeyManagerFactory algorithm or or
TrustManagerFactory algorithm or or

Table: Key differences for JSSE


System properties

The following system properties are no longer supported:

To enable PKIX revocation checking, you should now set the system property to true, instead of the system property.

If the DHKeySize is not specified in the property, a minimum is no longer set.


SSL settings

To enable , you no longer need to set the system property to false. However, you still need to remove from in the java.security file.

now enables TLS versions up to 1.3 with the following implications:

  • When you specify TLS with , TLS versions 1.0, 1.1, 1.2, and 1.3 are now all enabled. By contrast, in previous releases that use the IBM JSSE2 provider, only TLS version 1.0 is enabled.
  • In this release, you can also use to enable TLS versions 1.0 and 1.1. By contrast, in previous releases that use the IBM JSSE2 provider, only TLS version 1.1 is enabled.

Protocol aliases and are no longer supported in this release.


Key managers and key stores

Key managers and key stores are affected in the following ways:

  1. Certificate chain verification now stops when a trusted certificate is reached, with the following implications:
    • The OpenJDK replaces the . When you use the , it verifies the certificate chain up to the trusted certificate. Verification stops when it reaches a trusted certificate. In contrast, the verifies the entire server or client certificate chain, including trusted certificates. For example, if a trusted certificate is expired, then the handshake fails, even though the expired certificate is trusted. This change does not affect the .
  2. When is called with a null array, IBM Java 8 selects a valid from the highest priority in the configured security providers. In contrast, OpenJDK and Semeru create a which never returns any keys. This might cause TLS client authentication to fail silently in Semeru.

    When migrating from IBM Java 8 to Semeru, developers must explicitly provide a valid to use TLS client authentication or use to obtain an initialized with a default which respects the and system properties. For more information, see OpenJDK Bug JDK-8292574.

  3. now handles some exceptions differently. Instead of producing an error, now creates a default or with an empty in the following situations:
    • The or that is specified by the system properties does not exist.
    • The password is incorrect.
    • The type is inappropriate for the .

Ciphers, cipher suites, and certificates

Ciphers, cipher suites, and certificates are affected in the following ways:

  • Anonymous cipher suites are now allowed by JSSE .
  • Servers with DSA certificates must use specific cipher suites. If the server has a DSA certificate only, then these certificates can only use cipher suites with *_DH*_* in the name. Previously, if the server has a DSA certificate only, and only RSA*.
  • The SSL_* or TLS_* prefix in cipher suite names can no longer be used interchangeably. You should update your applications to use the prefix that is specified by OpenJDK. For a complete list of OpenJDK cipher suites, see: SunJSSE Cipher Suites.

JCE provider differences

This release contains the OpenJDK JCE provider, instead of the IBM JCE provider. Differences between these implementations might require code changes to your applications.

Some IBM JCE provider functions do not have an equivalent in the OpenJDK providers. Equivalent functions, if available, come from multiple OpenJDK providers as shown in the following table:

OpenJDK providersFunctions
SUNCertificateFactory (X.509), KeyStore (PKCS12, JKS, DKS), and MessageDigest (*)
SunECElliptic Curve algorithms
SunJCEDiffie-Hellman algorithms, KeyStore (JCEKS), KeyGenerator (*), Mac (*), and SecretKeyFactory (*)
SunRSASignRSA signature algorithms and RSA key generation using KeyFactory or KeyPairGenerator

Table: Equivalent JCE function for OpenJDK providers


Type AlgorithmParameters

IBMJCE algorithm or alias
Equivalent OpenJDK algorithm
(from the SunJCE provider)
 1
None
None
None


None
None


None








 2
















None











None

Table: Type AlgorithmParameters

Table notes:

  1. Non-standard aliases that are available from the IBMJCE provider are not available from OpenJDK providers. Use a standard algorithm name instead.
  2. The IBMJCE provider maps these object identifiers to PBEWithSHAAnd3KeyTripleDES. The OpenJDK equivalent maps these object identifiers to PBEWithSHA1AndDESede.

Type Cipher

IBMJCE algorithm or alias
Equivalent OpenJDK algorithm
(from the SunJCE provider)





 1
None
None
None
None


None
None




None








 2
















None



None








None

Table: Type Cipher

Table notes:

  1. The IBMJCE provider maps these object identifiers to Cipher.AESWrap. The OpenJDK equivalent does not have these object identifiers.
  2. The IBMJCE provider maps these object identifiers to PBEWithSHAAnd3KeyTripleDES. The OpenJDK equivalent maps these object identifiers to PBEWithSHA1AndDESede.

Type KeyFactory

IBMJCE algorithm or aliasEquivalent OpenJDK algorithmOpenJDK providerNotes
SUNNon-standard aliases that are available from the IBMJCE provider are not available from OpenJDK providers. Use a standard algorithm name instead.

SunECThe IBMJCE provider maps these object identifiers to . OpenJDK does not have these object identifiers.


SunRsaSignThe IBMJCE provider maps these object identifiers to . OpenJDK does not have these object identifiers. Both the IBMJCE provider and the OpenJDK equivalent have object identifiers for and .

Table: Type KeyFactory

Type KeyGenerator

IBMJCE algorithm or alias
Equivalent OpenJDK algorithm
(from the SunJCE provider)

 1
 2

None
 2
 2
 2
 2
 2
 2
None
None

Table: Type KeyGenerator

Table notes:

  1. IBMJCE maps these object identifiers to . OpenJDK does not have these object identifiers.
  2. Non-standard aliases that are available from the IBMJCE provider are not available from OpenJDK providers. Use a standard algorithm name instead.

Type KeyPairGenerator

IBMJCE algorithm or aliasEquivalent OpenJDK algorithmOpenJDK providerNotes
SUNThis object identifier maps to KeyPairGenerator.DSA. Alternatively, you can use 1.2.840.10040.4.1 or DSA.

SunECThe IBMJCE provider maps these object identifiers to . OpenJDK does not have these object identifiers.

SunRsaSignIBMJCE maps these object identifiers to . OpenJDK does not have these object identifiers. Both the IBMJCE provider and the OpenJDK equivalent have object identifiers for and .

Table: Type KeyPairGenerator

Type KeyStore

IBMJCE algorithm or aliasEquivalent OpenJDK algorithmOpenJDK providerNotes
None

SUNThe IBM JCE implementation of PKCS12 is the same as the OpenJDK implementation of PKCS12.
None
SUNThe IBM JCE implementation of PKCS12S2 is the same as the OpenJDK implementation of PKCS12.

Table: Type KeyStore

Type Mac

IBMJCE algorithm or alias
Equivalent OpenJDK algorithm
(from the SunJCE provider)
None
None

None
 1
 1
 1
 1
 1
 1



None

Table: Type Mac

Table notes:

  1. Non-standard aliases that are available from the IBMJCE provider are not available from OpenJDK providers. Use a standard algorithm name instead.

Type MessageDigest

IBMJCE algorithm or alias
Equivalent OpenJDK algorithm
(from the SUN provider)
None
 1


 1


 1


 1

Table: Type MessageDigest

Table notes:

  1. Non-standard aliases that are available from the IBMJCE provider are not available from OpenJDK providers. Use a standard algorithm name instead.

Type SecretKeyFactory

IBMJCE algorithm or alias
Equivalent OpenJDK algorithm
(from the SunJCE provider)


None
 1
None
None
None


None
None



None








 2










None








None
None
None
None
None
None

Table: Type SecretKeyFactory

Table notes:

  1. Non-standard aliases that are available from the IBMJCE provider are not available from OpenJDK providers. Use a standard algorithm name instead.
  2. The IBMJCE provider maps these object identifiers to . The OpenJDK equivalent maps these object identifiers to .

Type SecureRandom

IBMJCE algorithm or aliasEquivalent OpenJDK algorithm
None

None

None

Table: Type SecureRandom

Type Signature

IBMJCE algorithm or aliasEquivalent OpenJDK algorithmOpenJDK provider
 1SUN
 1SunEC


 1SunRsaSign


 1SunRsaSign


None
 1Usually SunEC 2


 1SUN



 1SunEC






 1SunRsaSign




 1SUN

 1SunRsaSign

 1SunEC

 1SunEC

 1SunRsaSign

 1SunEC

 1SunRsaSign

Table: Type Signature

Table notes:

  1. Non-standard aliases that are available from the IBMJCE provider are not available from OpenJDK providers. Use a standard algorithm name instead.
  2. The algorithm is unique in that you supply your own  object as the data to be signed. A  object that does not compute a message digest is therefore required for a provider to service the algorithm. The OpenJDK  class locates a security provider to service the algorithm. If you specify, on your  call, a particular provider to service the algorithm, the  class returns one of the following objects:

    1. An instance of a signature object, if the specified provider supports that algorithm
    2. A special signature object, if the specified provider supports the Cipher

    If you do not specify a provider on your  call, the  class manufactures a signature object from an Cipher object from the first cryptographic provider that offers that cipher algorithm, which is usually SunJCE. The order of preference of providers is determined by the list that is stored in the  class. You can get the list by using the  method.


Keys

The following differences exist for keys:

  • IBM DH and support key sizes between 256 and 2048 bits, that are a multiple of 64. The OpenJDK equivalents support key sizes between 512 and 2048 bits, that are a multiple of 64.
  • IBM DH defaults to a key size of 1024 bits. The OpenJDK equivalent defaults to 2048 bits.
  • IBM DSA defaults to a key size of 2048 bits. The OpenJDK equivalent defaults to 1024 bits.
  • IBM RSA recognizes the property. The corresponding OpenJDK RSA recognizes the property.
  • The OpenJDK security implementation does not support RFC5915-encoded EC private keys.
  • Before IBM SDK, Java Technology Edition Version 8, service refresh 1, fix pack 10, the IBM PKCS12S2 keystore type was equivalent to the OpenJDK PKCS12 keystore type, but the IBM PKCS12 keystore type was different. In later fix packs, the IBM PKCS12 and PKCS12S2 keystore types are modified to use a shared implementation. This shared implementation is forwards and backwards compatible with older IBM and older OpenJDK PKCS12 implementations. However, the OpenJDK 11 PKCS12 Keystore type is not compatible with these IBM PKCS12 and PKCS12S2 keystore types.
  • Oracle recommend that you upgrade your keystores to use the OpenJDK 11 PKCS12 keystore type.

Ciphers

IBM RSA Cipher recognizes the property. When this property is set, the runtime environment checks that RSA public keys are not used for decryption, and that RSA private keys are not used for encryption. There is no equivalent function in the OpenJDK security implementation.


Mask generation

The IBM and OpenJDK implementations differ in the default mask generation function (MGF1) that is used when performing RSA OAEP operations. The OpenJDK implementation always uses SHA-1 whereas the IBMJCE provider uses a mask generation function that corresponds to the OAEP hash algorithm.


Hardware acceleration

The IBMJCE provider supports hardware acceleration for some ciphers, if hardware acceleration is supported on that platform. The OpenJDK JCE implementation does not have this support.

JGSS provider differences

This release contains the OpenJDK JGSS provider, instead of the IBM JGSS provider.

The following table shows the equivalent functionality in the IBM and OpenJDK JGSS providers.

Attributes and system propertiesIBMOpenJDK
JGSS provider name
Package containing the JGSS provider
Package containing the SPNEGO mechanism
Package containing the Kerberos mechanism
System property The original purpose of the OpenJDK Java property is extended to facilitate undocumented WebSphere support".No Oracle equivalent
Support for Kerberos utilities (kinit, klist, and ktab)Supported on all platforms.Supported only on Windows platforms. On other platforms, use native Kerberos utilities.
kinit -c FILEPermits only the owner to access the cache file.Permits access to the cache file based on the user's umask value.
in the JAAS configuration file
Initiate/accept configuration declaration in the JAAS configuration file
(WSSKrbToken.jar)Available only in version 8, not version 11. Used only by WebSphere Application Server.No Oracle equivalent

Table: Functional differences between IBM and OpenJDK JGSS providers


System properties

The following table shows the equivalent system properties in the IBM and OpenJDK JGSS providers.

IBMOpenJDK
,

Table: Differences in system properties between IBM and OpenJDK JGSS providers

The following table shows the system properties that exist only in the IBM JGSS provider, which have no OpenJDK equivalent.

System propertyIBM
Used only by WebSphere Application Server. It is not documented for public consumption.
: YesSPNEGO has RFC 2478 behavior
Ignore Kerberos config file
Set charset for string-to-key encoding
Used only by WebSphere Application Server. It is not documented for public consumption.
OS400 charset

Table: System properties that exist only in the IBM JGSS provider

JAAS options for Kerberos login

The following table shows the equivalent functionality in the IBM and OpenJDK JGSS providers.

 IBMOpenJDK
InitiatorcredsType = (default)isInitiator = (default)
AcceptorcredsType = isInitiator =
Initiator & acceptorcredsType = Not available
Use default ticket cacheuseDefaultCache = (default is )
credsType must be or

Search sequence:
1. The file cache location specified by system property KRB5CCNAME.

2. <user_home><file_seperator>krb5cc_<user_name>

3. The local security authority (LSA) on Windows platforms
useTicketCache = (default is )
ticketCache is not set

Search sequence:
1. On Linux and Solaris platforms, when useTicketCache is set to , searches /tmp/krb5cc_uid

2. <user_home><file_separator>krb5cc_<user_name>

3. The local security authority (LSA) on Windows platforms
Specify ticket cacheuseCcache = useDefaultCache must not be set to useTicketCache =
ticketCache =
Use default keytabuseDefaultKeyTab = (default is )
credsType must be or

Default keytab search sequence:
1. Java property KRB5_KTNAME

2. <default_keytab_name> in libdefaults in the Kerberos configuration file

3. <user_home><file_seperator>krb5.keytab

4. <user_directory><file_seperator>krb5.keytab
useKeyTab = (default is )
keyTab is not set

Default keytab search sequence:
1. <default_keytab_name> in libdefaults in the Kerberos configuration file

2. <user_home><file_seperator>krb5.keytab

3. <user_directory><file_seperator>krb5.keytab
Specify keytabuseKeytab =
useDefaultKeyTab  must not be set to
useKeyTab =
keyTab =
Forwardable, proxiable, or renewable TGTforwardable|proxiable|renewable = (default is )Not available
Display login module bannermoduleBanner = (default is )Not available
Store credentials(principals & ticket & key) in shared statestoreSharedStateCredentials = (default is )Not available
Store user name and password in shared stateNot availablestorePass = (default is )
Clear user name and password in shared stateNot availableclearPass = (default is ))
Do not prompt for passwordNot availabledoNotPrompt = (default is )
Store key in principal’s private credentialsNot availablestoreKey =
Use password saved in shared stateuseFirstPass = or tryFirstPass = (defaults are both )useFirstPass = or tryFirstPass = (defaults are both )
Renew TGTrenewTGT = (default is )renewTGT = (default is )
Refresh Krb5 configuration filerefreshKrb5Config = (default is )refreshKrb5Config = (default is )
Output debug messagesdebug = (default is )debug = (default is )

Table: Comparison between IBM and OpenJDK JGSS provider function for Kerberos login

IBM Certification Path provider differences

This release contains the OpenJDK Certification Path provider, instead of the IBM Certification Path provider. Attributes and system properties that are available in IBM Certification Path (CertPath) provider might not be available, or might have different names, in the OpenJDK providers.

Attributes and system propertiesIBMOpenJDK
Package containing the CertPath provider
CertPath provider nameNo separate provider for CertPath. It is incorporated into the OpenJDK provider .
System property used to enable CRL Distribution Points extension checking
System property used for support of processing both complete CRLs and delta CRLs

, set to or

  • : both delta CRLs and complete CRLs are used, if revocation checking is requested by the caller.
  • (or not set): only complete CRLs are used.
No OpenJDK equivalent
System property used to define a timeout value for the connection to a certificate's CRL distribution point, or to a object
System property used to set the lifetime of entries in the memory cache of an LDAP CertStoreNo OpenJDK equivalent
System property that determines whether CertPath checks revocation only on the end-entity certificate of the certificate chain, or on all the certificates of the certificate chain except for the trusted root certificate (TrustAnchor)No OpenJDK equivalent. However, the same behavior can be specified within the class for either IBM or OpenJDK.
Strict CRL validationSupportedNot supported
Reverse buildingSupportedNot supported

Table: Functional comparison between IBM and OpenJDK Certification path providers

SASL provider differences

This release contains the OpenJDK SASL provider, instead of the IBM SASL provider. Differences between these providers might require code changes to your applications.

The following table lists IBM SASL classes that are different to equivalent OpenJDK SASL providers.

IBMSASL classOpenJDK SASL class

Table: Differences for IBM SASL and OpenJDK SASL classes

JAAS provider differences

This release contains the OpenJDK JAAS provider, instead of the IBM JAAS provider. Differences between these providers might require code changes to your applications.


JAAS Active Login

In this release, JAAS Active Login is removed. There is no OpenJDK equivalent.

JAAS equivalent classes

The following table lists IBM JAAS provider classes and equivalent OpenJDK JAAS provider classes.

IBM JAAS provider classOracle JAAS provider class































No Oracle equivalents

Table: Differences for IBM JAAS and OpenJDK JAAS provider classes

IBM SecureRandom provider

The provider is not available in this release. However, most of the functionality is available in the OpenJDK SUN provider.

If your application uses the provider, use the following table to find equivalent OpenJDK SUN functionality.

IBM SecureRandom functionEquivalent function in the SUN provider
algorithm algorithm
None. Use the default algorithm, or specify a different algorithm if required.
and algorithms and algorithms. The OpenJDK SUN provider also provides matching aliases of SHA and SHA1 for the .

Table: IBMSecureRandom equivalent function in the SUN provider

Note for Unix systems: The default seed source for the class in Version 8 was the random number generator /dev/urandom. In Version 11, the default changed to /dev/random, which blocks threads until sufficient entropy is available. This new default might therefore be a slower source of random values.

XML Digital Signature services (JSR105)

This release contains the reference implementation of JSR 105 XML Digital Signature services, which is identical to the IBM implementation provided in IBM SDK, Java Technology Edition, version 8.

The implementation class for the JSR105 XML Digital Signature provider is , which can be found in the module.

The IBM implementation is the provider. If your application uses the IBM security class , you must update your application code to use the JSR 105 class instead.

Notice about plans, directions and intent

Statements by IBM regarding its plans, directions, and intent are subject to change or withdrawal without notice at the sole discretion of IBM. Information regarding potential future products is intended to outline general product direction and should not be relied on in making a purchasing decision. The information mentioned regarding potential future products is not a commitment, promise, or legal obligation to deliver any material, code, or functionality. Information about potential future products may not be incorporated into any contract. The development, release, and timing of any future features or functionality described for IBM products remain at the sole discretion of IBM.

[{"Line of Business":{"code":"LOB08","label":"Cognitive Systems"},"Business Unit":{"code":"BU054","label":"Systems w\/TPS"},"Product":{"code":"SSNVBF","label":"Runtimes for Java Technology"},"ARM Category":[],"Platform":[{"code":"PF002","label":"AIX"},{"code":"PF016","label":"Linux"}],"Version":"11.0.0"},{"Type":"MASTER","Line of Business":{"code":"LOB45","label":"Automation"},"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSA3RN","label":"IBM Semeru Runtimes"},"ARM Category":[],"Platform":[{"code":"PF002","label":"AIX"},{"code":"PF016","label":"Linux"}],"Version":"11.0.0"}]

Was this topic helpful?

Document Information

Modified date:
21 April 2026

UID

ibm16411285