Skip to content
Search RunEntLinux

Searches general documentation on RunEntLinux. Each distribution has its own documentation search.

    Browse this documentation

    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.

    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”.

    ItemEL 8EL 9
    OpenSSL version1.1.13.0.x
    Algorithm architectureengineprovider
    MD4/RC4/DES and friendsavailable by defaultin the legacy provider, not loaded by default
    Inspecting providersno such conceptopenssl list -providers
    • 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.
    List the loaded providers
    openssl list -providers
    Inspect legacy algorithms under the policy config (troubleshooting)
    OPENSSL_CONF=/etc/crypto-policies/back-ends/opensslcnf.config openssl list -algorithms | grep -i md4

    Recommended order of remediation:

    1. Change the algorithm: MD4 → SHA-256, RC4/DES → AES-GCM, re-sign old certificates;
    2. Load the legacy provider explicitly in the application (OSSL_PROVIDER_load(NULL, "legacy"));
    3. If the component is external and immovable, evaluate FIPS/crypto policy combined with legacy loading, scoped as narrowly as possible.