Skip to content

Add OpenSSL native QUIC backend#13186

Draft
bneradt wants to merge 2 commits into
apache:masterfrom
bneradt:openssl35-native-quic-support
Draft

Add OpenSSL native QUIC backend#13186
bneradt wants to merge 2 commits into
apache:masterfrom
bneradt:openssl35-native-quic-support

Conversation

@bneradt
Copy link
Copy Markdown
Contributor

@bneradt bneradt commented May 20, 2026

A draft as a proof of concept. I will try this out on a box in production.


The first commit enables the existing quiche HTTP/3 transport to build against Fedora system OpenSSL 3.5 by detecting OpenSSL's third-party QUIC TLS callback API and providing a private shim for the legacy quictls/BoringSSL symbols quiche expects. It also requires static quiche in that compatibility mode so ATS resolves those symbols locally and keeps the final runtime linkage on the system OpenSSL libraries.

The second commit adds a separate optional OpenSSL-native QUIC backend for downstream HTTP/3. It uses OpenSSL 3.5 listener and stream APIs beneath ATS's existing HTTP/3 stack, keeps that backend mutually exclusive with quiche, exposes TS_HAS_OPENSSL_QUIC, and broadens generic client-side H3 tests so they run with either QUIC backend while quiche-specific internals remain quiche-only.

Fedora now ships OpenSSL 3.5 with the third-party QUIC TLS
callback API, but quiche still links against the older
quictls/BoringSSL symbols. ATS therefore could not use the system
OpenSSL library for downstream HTTP/3 without dragging in a different
TLS stack.

This adds CMake detection for the OpenSSL callback API and provides a
private compatibility layer that maps quiche's legacy hooks onto
SSL_set_quic_tls_cbs. This requires static quiche in that mode so ATS
resolves the shim symbols locally and links the final binaries against
the system OpenSSL libraries.

This also relaxes verifier-only HTTP/3 AuTest gates that do not execute
curl, so those tests can run when ATS has QUIC support but the installed
curl lacks HTTP/3.
@bneradt bneradt added this to the 11.0.0 milestone May 20, 2026
@bneradt bneradt self-assigned this May 20, 2026
@bneradt bneradt added HTTP/3 QUIC TLS Build work related to build configuration or environment Tests labels May 20, 2026
OpenSSL 3.5 can terminate QUIC connections directly, but ATS only had a
quiche-backed HTTP/3 listener. Operators who want to use the system
OpenSSL QUIC stack needed a separate downstream backend without changing
the existing quiche path or origin HTTP/3 scope.

This adds an optional ENABLE_OPENSSL_QUIC backend that uses OpenSSL's
native QUIC listener and stream APIs for downstream HTTP/3. This keeps
the backend mutually exclusive with quiche, exposes TS_HAS_OPENSSL_QUIC,
and shares ATS's existing HTTP/3 stream handling above the transport.

This also broadens generic client-side HTTP/3 tests to run for either
QUIC backend while leaving quiche-specific qlog and timeout internals
guarded by TS_HAS_QUICHE.
@bneradt bneradt force-pushed the openssl35-native-quic-support branch from 7934d66 to 89355ac Compare May 21, 2026 00:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Build work related to build configuration or environment HTTP/3 QUIC Tests TLS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant