Changes to cryptographic components
Review the most notable changes to cryptographic components between RHEL 9 and RHEL 10.
NO-HMAC-SHA1disables SHA-1 for HMAC operations-
Starting from RHEL 10.3, the
crypto-policiespackage introduces theNO-HMAC-SHA1subpolicy. Security scanners frequently flag SHA-1 use as a compliance issue, although SHA-1 collision vulnerabilities do not affect hash-based message authentication code (HMAC) security.As a result, you can apply the
NO-HMAC-SHA1subpolicy to disable SHA-1 for HMAC operations and satisfy compliance scanner requirements.
crypto-policiesno longer forces post-quantum cryptography forrpm-sequoia-
Before RHEL 10.3, post-quantum cryptography (PQC) support for the
rpm-sequoiapackage was hard-coded to remain enabled, regardless of the active system cryptographic policy. This workaround prevented verification failures on dual-signed RPM packages when PQC was disabled in the policy.Starting from RHEL 10.3, the
crypto-policiescomponent removes the hard-coded override. As a result,rpm-sequoiarespects the active system cryptographic policy as configured.
ca-certificatestruststore moved- The
/etc/pki/tls/certstruststore is converted to a different format better optimized for OpenSSL. As a consequence, if you use the files in/etc/pki/tls/certsdirectly, switch to the/etc/pki/ca-trust/extracteddirectory, where the same data is stored. For example, software that accesses the trust bundle at/etc/pki/tls/certs/ca-bundle.crtshould switch to using/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.peminstead. fips-mode-setupis removed- The
fips-mode-setupcommand is removed from RHEL. To enable the cryptographic module self-checks mandated by the Federal Information Processing Standard (FIPS) 140, enable FIPS mode during the system installation. See the Switching RHEL to FIPS mode chapter in the Security hardening document for more information. /etc/system-fipsremoved- Support for indicating FIPS mode through the
/etc/system-fipsfile has been removed from RHEL. To install RHEL in FIPS mode, add thefips=1parameter to the kernel command line during the system installation. You can check whether RHEL operates in FIPS mode by displaying the/proc/sys/crypto/fips_enabledfile. compat-openssl11is removed- The compatibility library for OpenSSL 1.1,
compat-openssl11, has been removed from RHEL 10. OpenSSL 1.1 is no longer maintained upstream and applications that use the OpenSSL TLS toolkit should be migrated to version 3.x. pkcs11-providerreplacesopenssl-pkcs11- As a part of the migration from OpenSSL engines to the Providers API, the
pkcs11-providerpackage replaces theopenssl-pkcs11package (engine_pkcs11). Theopenssl-pkcs11package is removed from RHEL 10. DEFAULTcryptographic policy rejects TLS ciphers with RSA key exchange-
TLS ciphers that use the RSA key exchange are no longer accepted in the
DEFAULTsystem-wide cryptographic policy in RHEL 10. These ciphers do not provide perfect forward secrecy and are not considered as secure as ciphers that use other key exchanges, for example, the Elliptic-curve Diffie-Hellman (ECDH) key exchange.This change also reduces the exposure to side-channel attacks because the RSA key exchange uses PKCS #1 v1.5 encryption padding, which can cause vulnerability to timing side-channel attacks.
If you need the RSA key exchange for interoperability with legacy systems, you can re-enable it by using the LEGACY system-wide cryptographic policy or by applying a custom subpolicy.
- The
LEGACYcryptographic policy disallows SHA-1 signatures in TLS - The
LEGACYsystem-wide cryptographic policy in RHEL 10 no longer allows creating or verifying signatures that use SHA-1 in TLS contexts. Therefore, libraries other than OpenSSL might no longer accept or create any signatures that use SHA-1 regardless of use case. OpenSSL continues to accept signatures that use SHA-1 when not used for TLS if the system is inLEGACYor this functionality is re-enabled with a custom subpolicy. SHA1subpolicy removed- The
SHA1subpolicy that allowed to use the SHA-1 algorithm for creating and verifying signatures in theDEFAULTsystem-wide cryptographic policy after entering theupdate-crypto-policies --set DEFAULT:SHA1command is no longer available in RHEL 10. - OpenSSL no longer permits SHA-1 at
SECLEVEL=2in TLS - OpenSSL does not accept the SHA-1 algorithm at
SECLEVEL=2in TLS in RHEL 10. If your scenario requires using TLS 1.0 or 1.1, you must explicitly setSECLEVEL=0and switch to the LEGACY system-wide cryptographic policy. In the LEGACY policy, applications that use SHA-1 in signatures outside of TLS will continue to work. - OpenSSL cipher suites no longer enable cipher suites with disabled hashes or MACs
- Previously, applying custom cryptographic policies could leave certain TLS 1.3 cipher suites enabled even if their hashes or MACs were disabled, because the OpenSSL TLS 1.3-specific
Ciphersuitesoption values were controlled only by theciphersoption of the cryptographic policy. With this update,crypto-policiestakes more algorithms into account when deciding whether to enable a cipher suite. As a result, OpenSSL on systems with custom cryptographic policies might refuse to negotiate some of the previously enabled TLS 1.3 cipher suites in better accordance with the system configuration. - OpenSSL startup certificate self-check removed
- The RHEL 10.3 update changes how OpenSSL validates certificates. The internal check of a service's own certificate chain at startup is no longer performed, as it is the peer's responsibility to verify the chain during the handshake. Ensure that peer systems, clients or servers, are correctly configured to perform standard certificate chain validation to maintain security.
- OpenSSL FIPS indicators are subject to change during the RHEL 10 lifetime
- Because RHEL introduced OpenSSL FIPS indicators before the OpenSSL upstream did, and both designs differ, the indicators may change in a future minor version of RHEL 10. After the potential adoption of the upstream API, the RHEL 10.0 indicators might return an error message "unsupported" instead of a result. See the OpenSSL FIPS Indicators GitHub document for details.
- OpenSSL 3.5 uses standard format for ML-KEM and ML-DSA
-
In RHEL 10.0, the
oqsproviderlibrary used a pre-standard format for the Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) and the Module-Lattice-Based Digital Signature Algorithm (ML-DSA) private keys. With the rebase to OpenSSL 3.5, you must convert the ML-KEM and ML-DSA keys to the standard format by using the following command:# openssl pkcs8 -in <old_private_key> -nocrypt -topk8 -out <standard_private_key>Replace
<old_private_key>with the path to the non-standard private key, and<standard_private_key>with the path where the standard key will be saved. - Switching to LEGACY policy does not enable support for SHA-1 in TLS connections
-
You can control support for SHA-1 signatures either by the
@SECLEVELsetting specified in the default cipher string or therh-allow-sha1-signaturesproperty. Support for SHA-1 in the TLS context is enabled by setting@SECLEVEL=0. However, this setting also allows other insecure algorithms.You can override the
SECLEVELsetting by specifying therh-allow-sha1-signaturesproperty in theevp_propertiessection. By default and when unspecified in the configuration file,evp_propertiesis set tono. The system-wide cryptographic policies set the property toyesafter you switch to theLEGACYpolicy.Therefore, to enable support for SHA-1 in contexts outside TLS, you can switch the system to the
LEGACYcryptographic policy. To enable SHA-1 in TLS, you must switch the system toLEGACYand use a cipher string that sets@SECLEVEL=0either by defining a custom cryptographic policy or setting this for your application in OpenSSL. - Stricter SSH host key permissions have been restored
- The necessary host key permissions have been changed from the previous less strict value of
0640to0600, which is also the value used upstream. Thessh_keysgroup, which previously owned all SSH keys, has also been removed. Therefore, thessh-keysignutility uses the SUID bit instead of the SGID bit. crypto-policiesnow setallow-rsa-pkcs1-encrypt = falsefor GnuTLS- In RHEL 10, the GnuTLS library blocks encryption and decryption with the RSA PKCS #1 v1.5 padding by default. Except for the LEGACY policy, the
allow-rsa-pkcs1-encrypt = falseoption is specified in all system-wide cryptographic policies (DEFAULT, FUTURE, and FIPS). - Non-post-quantum KEX removed from the
FUTUREpolicy -
The
FUTUREsystem-wide cryptographic policy no longer allows traditional, non-post-quantum, key exchange (KEX) methods. With this update, you can use only hybrid Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) key exchange algorithms.This aligns with the target use of the
FUTUREpolicy in controlled, isolated deployments and significantly impacts interoperability with the public internet. For example, when you switch RHEL 10 to theFUTUREpolicy, you cannot connect to the cdn.redhat.com network. Also, Java clients cannot connect to TLS servers running inFUTURE.Note that upcoming RHEL releases might further restrict signature algorithms in certificates and signatures to allow only post-quantum cryptography (PQC) in the
FUTUREpolicy. libsshsupports hybrid key exchange with ML-KEM andcrypto-policiesenablemlkem768x25519-sha256by default-
Starting from RHEL 10.2, the
libsshlibrary introduces support for post-quantum traditional (PQ/T) hybrid key exchange methods based on the quantum-resistant Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) standard and traditional Elliptic-curve Diffie–Hellman (ECDH) key exchange schemes. Themlkem768x25519-sha256algorithm is the preferred key exchange method for SSH connections unless you change the configuration.Also, the system-wide cryptographic policies enable the
mlkem768x25519-sha256key exchange algorithms for thelibsshlibrary in all predefined policies. As a result,mlkem768x25519-sha256is enabled by default and negotiated with the highest priority, protecting SSH connections with a combination of traditional and post-quantum cryptography (PQC).