yum upgrades for production use, this is the repository for you.
Active subscription is required.
Technical Briefing: NGINX TLS Backends — aws-lc Support, quictls Backports, and the OpenSSL 3.5 LTS Migration
The Problem
NGINX’s TLS backend options have been constrained by two separate issues: compile-time incompatibilities with aws-lc, and the end-of-life status of the quictls fork that NGINX-MOD has historically shipped against.
aws-lc header collisions. aws-lc and NGINX’s old QUIC shim collided at compile time in 2024. This has now been resolved: NGINX upstream added aws-lc support in 1.29.2 (issue #185 closed). The NGINX-MOD package already builds on NGINX 1.30.0, so aws-lc support is present in the shipped source tree — but it is not wired up at build time.
quictls is EOL. The original quictls/openssl repo was archived April 10, 2025, tracking only through OpenSSL 3.1.7 (EOL March 2025). Security fixes for that base are now carried as backports.
aws-lc: Manual Build Recipe and Remaining Caveats
Building NGINX against aws-lc manually
Build aws-lc first:
cmake -GNinja -DBUILD_SHARED_LIBS=1 -DCMAKE_INSTALL_PREFIX=/opt/aws-lc ..
Then configure NGINX 1.29.2+ with:
--with-cc-opt="-I/opt/aws-lc/include" \
--with-ld-opt="-L/opt/aws-lc/lib64 -Wl,-rpath,/opt/aws-lc/lib64" \
--with-http_v3_module
OCSP stapling
OCSP stapling is no longer a universal blocker. aws-lc/BoringSSL still lack server-side stapling, but for Let’s Encrypt users ssl_stapling on; has been a no-op since August 2025, and CRL-based revocation is what browsers actually consult. A long tail of paid CAs and some compliance regimes still require stapling.
Cipher suite differences
aws-lc drops DHE and CCM cipher suites (inherited from BoringSSL). This only matters for clients without ECDHE — practically OpenSSL before 1.0.0 (RHEL/CentOS 5, Windows XP, Java 6 era). EL6 (OpenSSL 1.0.1) and EL7 (OpenSSL 1.0.2 after 7.4) negotiate ECDHE fine. Audit with a $ssl_cipher log field and grep for DHE-* entries.
The remaining blocker is maintenance, not technology
A packaged NGINX-MOD-AWS-LC is blocked by maintenance overhead:
- aws-lc is API-compatible but explicitly NOT ABI-compatible with OpenSSL. Every TLS-touching dynamic module (lua-nginx-module, ModSecurity, JWT validators, OpenTelemetry) needs rebuilding against aws-lc headers with per-module source patches — for example, the
sk_X509_NAME_findargument-count difference. - aws-lc inherits BoringSSL’s “no stable API” stance, with no STABILITY.md or semver guarantee, so patches need ongoing maintenance across releases.
The decision is now build-vs-wait-for-demand; subscribers haven’t been asking for it specifically. Subscribers who want a shipped NGINX-MOD-AWS-LC variant should say so — that demand signal tips the calculus.
Standalone aws-lc packages
aws-lc-libs and aws-lc-devel are available in the extras repo, installing isolated under /usr/lib64/aws-lc with their own SONAMEs (libcrypto-aws-lc.so.0, libssl-aws-lc.so.0) so they coexist with system OpenSSL. Builds cover EL 6/7/8/9/10, Amazon Linux 2/2023, Fedora, and openSUSE.
Install with:
dnf install aws-lc-libs aws-lc-devel
aws-lc continues to gain integration support: HAProxy 2.9+, NGINX 1.29.2+, and more on the way.
quictls: Backport Maintenance and the “HollowByte” Issue
Backport stream
Security fixes for the archived quictls base are carried as backports. quictls-3.1.7-7 shipped three backports after auditing every OpenSSL advisory since September 2024 (~29 issues technically reach 3.1, almost none reachable in an NGINX build; the build uses no-ec2m no-sm2 no-sm4). Both CVE fixes were released upstream in OpenSSL 3.1.8, a version quictls never tagged — so CVE-2025-9232 doesn’t apply at all.
“HollowByte”
The most dangerous audited issue, nicknamed “HollowByte,” has no CVE. A TLS peer declares a large handshake message and never sends the body, while OpenSSL pre-grew its receive buffer to the full declared size. It is pre-authentication and remotely triggerable. Okta’s red team OOM-killed a 1 GB server at 547 MB of frozen fragmented allocations and locked up a quarter of RAM on a 16 GB box, with glibc never returning the arenas.
OpenSSL classified it as “bug or hardening,” fixed it quietly in 3.0.21, 3.4.6, 3.5.7, 3.6.3 and 4.0.1, and never patched 3.1. No vulnerability scanner will flag it. The backport also carries the BN_GF2m_poly2arr fix.
Why the backports shipped without rebuilds
Because NGINX links quictls’s libssl/libcrypto dynamically from a private libdir, the fixes shipped in quictls-libs with ABI unchanged — subscribers picked them up with:
dnf update quictls-libs
plus an NGINX restart, with no NGINX or module rebuilds.
The successor fork is not production-ready
The successor quictls/quictls fork (from OpenSSL 3.3, jointly maintained by Akamai and Microsoft, planned to land at the Apache Software Foundation) is still not production-ready. Open issues include:
- an
ssl3_dispatch_alertinfinite loop (#338) - ARM assembler build failures (#319)
- missing packager documentation (#318)
Most have no comments since filing. Activity is static-analysis cleanup and test fixes, not release engineering.
The Exit: OpenSSL 3.5 LTS
The stated exit from the backport treadmill is plain OpenSSL. NGINX now recommends OpenSSL 3.5.1 or later for QUIC and lists quictls as merely an alternative.
OpenSSL 3.5 is LTS supported until April 2030 with native QUIC and 0-RTT. However, its QUIC API is incompatible with the BoringSSL-style API shared by quictls, aws-lc, ngtcp2 and quiche — swapping the backend is a real port plus a rebuild of every TLS-touching dynamic module.
Update (25 August 2026)
NGINX-MOD and EDGE now link against openssl35, an ABI-isolated build of OpenSSL 3.5 LTS with a CVE stream tracked to April 2030.
- EDGE has shipped it since 25 August 2026.
- NGINX-MOD has it on the testing channel —
dnf install nginx-modfrom the default repo still gives the quictls build.
ECH now works: ssl_ech_file, $ssl_ech_status, $ssl_ech_outer_server_name, with key rotation packaged in nginx-mod-ech and edge-ech, plus a live demo at ech-test.getpagespeed.com.
Install Guidance
For HTTP/3 NGINX on Enterprise Linux, install NGINX-MOD from extras. The stable channel is quictls-backed; the OpenSSL 3.5 LTS build with 0-RTT, post-quantum key exchange and ECH is on testing and moves to stable after soaking.
For aws-lc as a standalone library:
dnf install aws-lc-libs aws-lc-devel
from extras.getpagespeed.com.
Subscribers who want a shipped NGINX-MOD-AWS-LC variant should say so — that demand signal tips the build-vs-wait calculus.
Read the full article: aws-lc NGINX in 2026: Why we still ship quictls
