EL 9: OpenSSL 3.0
EL 9’s OpenSSL jumps from 1.1.1 to 3.0, the largest architectural shift OpenSSL has seen in a decade: crypto implementations become pluggable providers, and a batch of insecure legacy algorithms moves into a legacy provider that is not loaded by default. Applications depending on old hashes or old cipher suites fail at their first handshake or verification after the upgrade.
What changed
Section titled “What changed”OpenSSL 3.0 migrates algorithm implementations from the engine model to the provider model:
- default provider: modern algorithms — AES, SHA-2/3, RSA, EC, ChaCha20, and friends;
- legacy provider: MD4, MD2, RC2, RC4, Blowfish, CAST, IDEA, SEED, single DES, RIPEMD160, and friends;
- base / null / fips providers: encodings, the null implementation, and the FIPS-validated module.
The legacy provider is not loaded by default: an application asking for MD4 gets an outright error (such as unsupported or digital envelope routines::unsupported) instead of quietly working as it did in the 1.1 era.
At the same time, EL 9’s crypto policies still apply to OpenSSL: the DEFAULT policy itself refuses weak algorithms, while the legacy provider addresses the separate layer of “allowed by policy but not loaded by 3.0 defaults”.
EL 8 vs EL 9
Section titled “EL 8 vs EL 9”| Item | EL 8 | EL 9 |
|---|---|---|
| OpenSSL version | 1.1.1 | 3.0.x |
| Algorithm architecture | engine | provider |
| MD4/RC4/DES and friends | available by default | in the legacy provider, not loaded by default |
| Inspecting providers | no such concept | openssl list -providers |
What it means for you
Section titled “What it means for you”- Old applications and old file formats: legacy backup formats, old protocol clients, old database drivers, and old PFX/P12 files that use MD4-style hashes fail with
unsupported-class errors. - In-house code: programs calling low-level APIs such as
EVP_md4()must either load the legacy provider explicitly or move to modern algorithms. - Certificates and TLS: modern TLS is unaffected; the pain concentrates in old cipher suites and old hash signatures, which the crypto policies constrain as well.
Checking and remediation
Section titled “Checking and remediation”openssl list -providersOPENSSL_CONF=/etc/crypto-policies/back-ends/opensslcnf.config openssl list -algorithms | grep -i md4Recommended order of remediation:
- Change the algorithm: MD4 → SHA-256, RC4/DES → AES-GCM, re-sign old certificates;
- Load the legacy provider explicitly in the application (
OSSL_PROVIDER_load(NULL, "legacy")); - If the component is external and immovable, evaluate FIPS/crypto policy combined with legacy loading, scoped as narrowly as possible.
Further reading
Section titled “Further reading”- EL 8: System-wide crypto policies — how update-crypto-policies works
- FIPS mode — the FIPS provider and compliance scenarios
- EL 9: A new toolchain — the other refreshes in this release
- EL 10: Post-quantum cryptography — where OpenSSL 3.5 goes next