NGINX with OpenSSL 3.5 on Debian and Ubuntu is now simply what apt-get install nginx gives you. If you run our packages on Ubuntu 20.04, your web server stopped linking OpenSSL 1.1.1 this month.
That library reached upstream end of life on 11 September 2023. Until now it was still the TLS stack behind every NGINX binary on focal, ours included, because a package built on a distribution inherits that distribution’s OpenSSL. As of late August 2026 it does not. Every Debian and Ubuntu suite we publish links openssl35, the ABI-isolated OpenSSL 3.5 LTS build our RPM packages already moved to earlier in the month.
One apt-get upgrade brings it across. Nothing in your configuration changes.
What OpenSSL 3.5 on Debian and Ubuntu brings
The DEB and RPM builds are one stack again. That means these arrive together, on suites that could not have had any of them before:
- Post-quantum key exchange. Hybrid
X25519MLKEM768, on by default, negotiated by current Chrome and Firefox without you configuring anything. The NGINX post-quantum TLS guide covers how to verify it, and the one common hardening directive that silently switches it back off. - Encrypted Client Hello. RFC 9849, via
ssl_ech_file, plus the newnginx-echpackage for key rotation. See the ECH setup guide. - TLS certificate compression. RFC 8879 with zlib, Brotli and zstd, so the handshake stops shipping an uncompressed chain. It defaults to off; one directive turns it on.
- A CVE stream tracked to April 2030, independent of what your distribution vendor chooses to backport.
Here is what your NGINX linked before the switch, and what it links now:
| Suite | System OpenSSL | Upstream status | Ours now |
|---|---|---|---|
| Ubuntu 20.04 LTS (focal) | 1.1.1f | End of life since Sept 2023 | 3.5.8 |
| Ubuntu 22.04 LTS (jammy) | 3.0.2 | Supported to Sept 2026 | 3.5.8 |
| Ubuntu 24.04 LTS (noble) | 3.0.13 | Supported to Sept 2026 | 3.5.8 |
| Debian 12 (bookworm) | 3.0.20 | Supported to Sept 2026 | 3.5.8 |
| Debian 13 (trixie) | 3.5.6 | Supported to April 2030 | 3.5.8 |
Every one of those suites is published for both amd64 and arm64.
Trixie is worth a note, because its system OpenSSL is already 3.5 and the table makes the switch look pointless there. It is not: Debian 13 ships NGINX 1.26.3, which predates ssl_certificate_compression and has no ECH support at all. Both halves have to be new enough, and only one place gives you both.
Your dynamic modules keep loading
A change this deep under an NGINX binary is a fair thing to worry about if you run modules. You do not have to. Every nginx-module-* package in the DEB repository is pinned to the NGINX ABI rather than to the TLS library, through the virtual nginx-r1.30.4 that the NGINX package provides. Swapping the OpenSSL underneath does not invalidate that, so the modules already installed keep loading, and anything that does need a newer NGINX comes across in the same apt-get upgrade.
Verifying it on your own box
Ask the binary rather than the shell. openssl version reports the command-line tool, which may have nothing to do with the library NGINX is linked against:
nginx -V 2>&1 | grep "built with"
That should now report:
built with OpenSSL 3.5.8+gps 25 Aug 2026
Verified by installing the package in a clean container on the two extremes of the matrix, Ubuntu 20.04 on amd64 and Debian 13 on arm64. Both print exactly that line. If yours still names your distribution’s OpenSSL, you are on a package from before the switch, and apt-get upgrade is the whole migration.
The library sits in its own directory with its own SONAMEs, so it cannot disturb anything else on the machine:
ldd /usr/sbin/nginx | grep ssl
libssl.so.35.3 => /usr/lib/x86_64-linux-gnu/openssl35/libssl.so.35.3
Your system OpenSSL is untouched. Everything else that links it keeps working exactly as before.
One upgrade-day detail: NGINX loads its TLS library when the master process starts, so a reload re-reads the configuration but keeps the old library mapped. Our packages do the graceful binary handover for you when NGINX itself is upgraded, so this only bites when you upgrade openssl35-libs on its own. In that case run systemctl restart nginx rather than a reload.
To check the result from outside, our SSL test reports post-quantum key exchange, ECH and certificate compression as first-class results rather than as footnotes.

Why 3.5, and not the newest number
Because 3.5 is the Long Term Support release. OpenSSL supports an LTS for at least five years and everything in between for far less, which settles the question on its own: 3.5 is supported to April 2030, while 4.0 is not an LTS and drops out in May 2027. Chasing the higher major number would have bought a shorter support window than the one we are already on.
That is why we backported Encrypted Client Hello onto 3.5 rather than moving the fleet to 4.0 to get it. A longer piece on that trade-off goes through the support dates, the one TLS feature 4.0 actually adds, and the hardware key support it removes.
Getting it
Set up the GetPageSpeed APT repository, then:
sudo apt-get update
sudo apt-get install nginx
Existing installations upgrade in place:
sudo apt-get upgrade
Coming from a third-party PPA? The migration guide from the ondrej NGINX PPA covers the pinning you need so the switch sticks.
Repository metadata is public; downloading packages needs an active subscription. Subscribe to the GetPageSpeed repository to run NGINX 1.30.4 with OpenSSL 3.5 on Debian and Ubuntu, alongside 100+ modules built against the same library, on RPM and DEB alike.