curl: enable HTTP/3 support by default #435914
Conversation
|
If I'm not mistaken, OpenSSL's implementation of the QUIC protocol has performance issues compared to QuicTLS. |
But isn't this using ngtcp2 for QUIC and only OpenSSL for crypto? |
The ngtcp2 package supports OpenSSL 3.5 only through the |
According to both the documentation and what I have observed during builds, ngtcp2 uses a helper library for all cryptography libraries. It is true that quictls uses a different one (aptly called
For reasons that have only become better since then. The released quictls is unmaintained and had its last release 11 months ago, and OpenSSL in the meantime had several security-relevant changes such as vulnerability fixes and the introduction of ML-KEM support in 3.5 (for hybrid post-quantum key exchange support). Meanwhile the supposed replacement has no release at all yet, and with upstream OpenSSL improving their QUIC support the case for QuicTLS does not look to get more compelling. |
emilazy
left a comment
There was a problem hiding this comment.
Seems like a good idea, as discussed on Matrix.
I agree that ngtcp2 + OpenSSL 3.5 seems like the obvious route here. AIUI, it does not have the issues of OpenSSL’s native QUIC implementation.
330e0c7 to
d3e05c2
Compare
Scrumplex
left a comment
There was a problem hiding this comment.
Changes LGTM. Thanks for making sure that every commit still evaluates.
|
Now Samba package with QUIC support based on ngtcp2 library has been released. Probably soon QUIC module for Linux kernel will be released. And none of them support OpenSSL's QUIC implementation. If necessary, quictls can be replaced with wolfSSL, BoringSSL, aws-lc or libressl. |
|
@Izorkin I'm not sure I understand what you are suggesting. This PR also uses ngtcp2 (and OpenSSL for crypto) for curl's http/3 support |
|
This PR release changes the QUIC protocol implementation in ngtcp2 from OpenSSL 3.5, which is not supported by other projects. This may lead to bugs. |
|
ngtcp2 + OpenSSL seems to be still marked as experimental, not sure if we actually want to ship this then |
|
Samba already builds against GnuTLS, so it would probably use |
From reading the curl So this would be a question of changing the default TLS library used by curl in general. GnuTLS we would rather get rid of as much as possible, LibreSSL lags behind OpenSSL these days, BoringSSL comes with no stability promises and is disclaimed by its upstream as unsuitable for general‐purpose use. The only palatable options would seem to be wolfSSL or AWS‐LC. AWS‐LC is in the OpenSSL fork family and already moderately load‐bearing for Rust stuff, so likely to be the most viable choice here. Still, though, I am sceptical we would want to make that switch when we use OpenSSL so extensively anyway. curl and nghttp2 are the only consumers of our ngtcp2 package and curl seems to prefer the ngtcp2 + OpenSSL combination. It’s also the only option they’re giving CodeQL coverage in CI, for instance. I think the choice here is clear if we want to enable HTTP/3 support by default, which I think we do. (After writing this, I see that it appears the CMake build of curl can support multiple TLS libraries, but it is explicitly not supported with HTTP/3. Even if it was, I’m not sure we’d want two of them in the closure with the attendant additional security exposure, and we don’t use the CMake build of curl anyway.) |
16577bc to
8c89f3c
Compare
fetchurl instead of fetchFromGitHub, because otherwise we run into infrec Diff: ngtcp2/ngtcp2@v1.14.0...v1.15.1 Changelog: https://github.com/ngtcp2/ngtcp2/releases/tag/v1.15.1
Otherwise we run into infrec.
8c89f3c to
a7b73a1
Compare
|
Maybe then should create a separate package |
|
And have no |
emilazy
left a comment
There was a problem hiding this comment.
Confirmed that curl --http3-only https://google.com/ works on aarch64-darwin.
|
Maybe relevant question from curl maintainer Daniel Stenberg: https://curl.se/mail/lib-2025-10/0000.html |
|
This does not appear relevant, as it relates to |
|
Not related directly to this PR, yes, but to OpenSSL QUIC and curl |
There's some issue with updating the nix flake. In the meantime this bumps opam-repository so we can pull some new dependencies in other PRs. Original issue seems to be caused by NixOS/nixpkgs#435914 Test plan: nix ci passes synced from Pro 0cc7059429d452056ab22dc7e2dbde771dd2534d
There's some issue with updating the nix flake. In the meantime this bumps opam-repository so we can pull some new dependencies in other PRs. Original issue seems to be caused by NixOS/nixpkgs#435914 Test plan: nix ci passes synced from Pro 0cc7059429d452056ab22dc7e2dbde771dd2534d
There's some issue with updating the nix flake. In the meantime this bumps opam-repository so we can pull some new dependencies in other PRs. Original issue seems to be caused by NixOS/nixpkgs#435914 Test plan: nix ci passes synced from Pro 0cc7059429d452056ab22dc7e2dbde771dd2534d
There's some issue with updating the nix flake. In the meantime this bumps opam-repository so we can pull some new dependencies in other PRs. Original issue seems to be caused by NixOS/nixpkgs#435914 Test plan: nix ci passes synced from Pro 0cc7059429d452056ab22dc7e2dbde771dd2534d
There's some issue with updating the nix flake. In the meantime this bumps opam-repository so we can pull some new dependencies in other PRs. Original issue seems to be caused by NixOS/nixpkgs#435914 Test plan: nix ci passes synced from Pro 0cc7059429d452056ab22dc7e2dbde771dd2534d
|
OpenSSL-QUIC support will be dropped in curl 8.19.0: |
|
Again, this is not relevant, because nixpkgs uses |
See https://curl.se/docs/http3.html
Things done
passthru.tests.nixpkgs-reviewon this PR. See nixpkgs-review usage../result/bin/.Add a 👍 reaction to pull requests you find important.