OpenSSL: supported versions and how to update safely

Updated November 2026

OpenSSL is the TLS and crypto library behind most web, mail, VPN and database servers. Patch it with your distribution's packages, then restart every process that loaded the old library. Updating the files on disk is not enough. As of November 3, 2026, upstream supports 3.5 (LTS), 4.0 and 4.1.

What OpenSSL is

OpenSSL has two libraries, libssl (the TLS protocol) and libcrypto (ciphers, hashes, certificates), plus the openssl command-line tool. nginx, Apache httpd, Postfix, Dovecot, PHP, Python, many databases and OpenSSH's sshd load it. One library update therefore touches many services, which is why the restart step matters more here than for any other package.

Supported versions

OpenSSL upstream support, as of November 2026
BranchLatestSupport ends
4.14.1.0 (Oct 23, 2026)2027-11-23
4.04.0.3 (Sep 29, 2026)2027-05-14
3.5 (LTS)3.5.9 (Sep 29, 2026)2030-04-08
3.63.6.5Ended 2026-11-01
3.43.4.8Ended 2026-10-22
3.0, 1.1.1, 1.0.2–Ended (3.0 on 2026-09-07); paid extended support available
1.1.0 and older–Ended

The rules, from the OpenSSL release strategy: a long-term support (LTS) release comes every two years and gets at least five years, with only security fixes in the last year. Non-LTS releases after 3.5 get 13 months. Extended support for 3.0, 1.1.1 and 1.0.2 is sold by OpenSSL Corporation. The 4.1 end date comes from the OpenSSL downloads page.

4.x is a new major version. OpenSSL's versioning policy says a major release generally breaks API and ABI compatibility; minor and patch releases keep both. 4.0 removed engine support, SSLv3, the SSLv2 Client Hello and the c_rehash script (use openssl rehash). Never replace a distribution's 3.x library with 4.x by hand: programs built against 3.x expect 3.x.

Distro packages and backports

Distributions keep one OpenSSL branch for a release's whole life and backport fixes into it. Ubuntu 24.04, for example, still ships 3.0.13, a branch upstream dropped, and Canonical keeps patching it. That is fine while your distribution release is supported. Judge the package version, not the upstream number.

CVE-2026-84782 (high, DTLS) by release, checked November 3, 2026
ReleaseOpenSSL branchFixed package
Debian 133.53.5.7-1~deb13u3 (DSA-6531-1)
Debian 12 (LTS)3.03.0.22-1~deb12u2 (DLA-4859-1)
Ubuntu 26.04 LTS3.53.5.5-1ubuntu3.6
Ubuntu 24.04 LTS3.03.0.13-0ubuntu3.16
Ubuntu 22.04 LTS3.03.0.2-0ubuntu1.30
Alpine 3.243.53.5.9-r0
FreeBSD (base)3.0 on 14.x15.1-p4, 14.5-p1, 14.4-p10 (FreeBSD-SA-26:68)

Upstream fixed this flaw in 3.5.9, yet Debian 13's fixed package is called 3.5.7: the patch was backported. The same advisory batch fixed 13 more CVEs, mostly low severity and mostly in QUIC, DTLS, CMP and SM2 code.

Find which OpenSSL each program uses

openssl version -a                              # the CLI tool and its library
ldd "$(command -v nginx)" | grep -E 'libssl|libcrypto'   # what a binary links to
ldconfig -p | grep -E 'libssl|libcrypto'        # libraries the loader knows about
sudo find / -xdev \( -name 'libssl.so*' -o -name 'libcrypto.so*' \) 2>/dev/null

Extra copies in /usr/local, /opt or an application folder are not updated by the package manager. Some software bundles its own OpenSSL: Node.js does (node -p process.versions.openssl), and every container image has its own. See Node.js and containers.

Update commands

# Debian 13, Ubuntu 24.04 and later (libssl3 on Debian 12 and Ubuntu 22.04)
sudo apt update
sudo apt install --only-upgrade openssl libssl3t64

# RHEL, Rocky, AlmaLinux, Oracle Linux, Amazon Linux 2023
sudo dnf upgrade --refresh openssl openssl-libs

# SUSE: list, then install the pending patches
sudo zypper refresh
sudo zypper list-patches | grep -i openssl
sudo zypper patch

# Alpine (as root)
apk -U upgrade libssl3 libcrypto3     # add openssl if the CLI is installed

# FreeBSD base system (as root): distribution sets, or pkgbase on 15.0 and later
freebsd-update fetch install
pkg upgrade -r FreeBSD-base

On FreeBSD use only one of the two base-update commands, the one that matches how the system was installed (see FreeBSD). For containers, rebuild the image from an updated base image and recreate the container.

Restart everything that uses it

1. Update new files on disk 2. Find old copy in memory 3. Restart each service 4. Verify nothing left Skip step 3 and the running services stay vulnerable.
A running program keeps the library it loaded at start-up until it restarts.

This lists every process that still maps a deleted (old) copy of the library:

for f in $(sudo grep -lE '(libssl|libcrypto).*\(deleted\)' /proc/[0-9]*/maps 2>/dev/null); do
  pid=${f#/proc/}; pid=${pid%/maps}
  ps -o pid=,comm= -p "$pid"
done

Distribution tools do the same check by service name: sudo needrestart -r l on Debian and Ubuntu, sudo dnf needs-restarting -s on the RHEL family, and sudo zypper ps -s on SUSE. Restart each service listed, for example sudo systemctl restart nginx postfix (this restarts those services). For sshd, keep your current session open and test a new login before you log out. The FreeBSD advisory puts it simply: "Restart all daemons that use the library, or reboot the system." If many services are affected, a reboot is the simplest choice. More in restarting after an update.

If you build OpenSSL yourself

Do this only when an application needs a newer branch than your distribution ships. Never install over the system library in /usr. Install into its own prefix and link your application to it:

gpg --verify openssl-3.5.9.tar.gz.asc openssl-3.5.9.tar.gz
./Configure --prefix=/opt/openssl-3.5 --openssldir=/opt/openssl-3.5/ssl
make && make test
sudo make install

Current releases are signed by the key with fingerprint B146 647E 45A7 B339 47AB 226B 2A2C 87D1 6169 2D40; import it from the downloads page first. Choose 3.5 LTS unless you need 4.x features. You now own this copy: watch every advisory and rebuild it, and the programs linked to it, for each fix.

Where advisories appear

Quick hardening tips

Sources