Skip to content

/changelogs/openssl/openssl-3-to-4

OpenSSL 3.x to 4.0: removed features and breaking changes

The commands on this page have not been executed by our verification runner yet.updated 2026-10-20
tool
OpenSSL
versions
3.x → 4.0

OpenSSL 4.0.0 was released on 2026-04-14. For applications that only use TLS through the high-level API the upgrade from 3.x is usually a rebuild; projects that still use engines, SSLv3, custom EVP methods or parse openssl -text output need changes. OpenSSL 3.5 remains the LTS release until 2030-04-08, so there is no rush for systems that want stability.

Removed

Removed in 4.0Replacement
Engines (ENGINE_* API, -engine options)providers (OSSL_PROVIDER)
SSLv3TLS 1.2 / TLS 1.3
SSLv2-format Client Hello—
c_rehash scriptopenssl rehash
openssl ca -msie-hack—
Custom EVP_CIPHER, EVP_MD, EVP_PKEY, EVP_PKEY_ASN1 methodsproviders
Fixed-version method functions (e.g. TLSv1_2_method)TLS_method() with SSL_CTX_set_min/max_proto_version()
ERR_get_state(), ERR_remove_state(), ERR_remove_thread_state()—
BIO_f_reliable()none

Behaviour changes to check

  • Output format: key data printed in hex no longer has an extra leading 00:, and hex dumps use fixed widths (24 bytes for signatures, 16 otherwise). Scripts that scrape openssl x509 -text or openssl pkey -text output may break.
  • Stricter verification: AKID checks with X509_V_FLAG_X509_STRICT, and extra CRL checks.
  • Cleanup: libcrypto no longer frees global data through atexit(); OPENSSL_cleanup() runs in a global destructor, or not at all by default.
  • Build defaults: deprecated TLS curves (RFC 8422) and explicit EC curves are off unless you build with enable-tls-deprecated-ec / enable-ec_explicit_curves.
  • API: ASN1_STRING is opaque, many X509 functions take or return const pointers, and X509_cmp_time() and friends are deprecated in favour of X509_check_certificate_times().

New in 4.0

  • Encrypted Client Hello (ECH, RFC 9849).
  • SM2/SM3 TLS support (RFC 8998) and the hybrid post-quantum group curveSM2MLKEM768.

Upgrade checklist

  1. Search the code for ENGINE_, -engine, SSLv3_method, TLSv1_2_method and other fixed-version methods.
  2. Rebuild against 4.0 headers and fix const warnings.
  3. Re-run any script that parses openssl ... -text output.
  4. Replace c_rehash calls with openssl rehash.

Sources