-
-
Notifications
You must be signed in to change notification settings - Fork 31.8k
ssl module: QUIC support for HTTP/3 #81229
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
This ticket collects information for QUIC [1][2] support and tracks, which APIs have to be added to Python in order to implement a QUIC protocol stack on top of Python's ssl and socket module. QUIC is a "UDP-Based Multiplexed and Secure Transport" protocol. It will replace TCP and TLS record layer as transport channels in the upcoming HTTP/3 [3][4] standard. Although it's UDP, QUIC does *not* use DTLS (Datagram TLS, vulgo TLS over UDP). As far as I understand QUIC at the moment, the ssl module has to gain two additional features:
OpenSSL does not implement the necessary APIs, yet [5]. Tatsuhiro Tsujikawa's experimental OpenSSL fork [6] implements (1) as a SSL option SSL_MODE_QUIC_HACK and (2) as a callback that acts on five different key types. (Disclaimer: My current understanding of QUIC is very limited.) [1] https://tools.ietf.org/html/draft-ietf-quic-transport-20 |
I have started implementing a QUIC stack in Python [1] so I'll share a couple of thoughts in addition to Christian's two valid points:
For aioquic I decided to use cryptography's primitives and implemented a minimal TLS 1.3 engine on top of it. This avoids having to wait for some future version of OpenSSL to provide the necessary APIs or having to use a patched version of OpenSSL. |
Thanks for your feedback! So far I actively refrained from exposing or implementing any encryption primitives and API like AES, ChaCha20, and ECDSA. I'm worried about potential legal issues and export control restrictions. I have to talk to VanL first. |
OpenSSL 3.0.0 is not going support QUIC, https://www.openssl.org/blog/blog/2020/02/17/QUIC-and-OpenSSL/ |
The OpenSSL authors make a fair point, QUIC seems to be taking a long time to stabilize with little consideration for backwards compatibility at this stage. As stated previously though it's perfectly feasible to implement a QUIC stack by linking to an unpatched OpenSSL if you're willing to implement a stripped-down TLS 1.3 engine yourself. |
Hi ! The QUIC RFC is now much more stable than back in 2020. Support is still a bit sparse, but Openssl 3.2 has at least added support for the client, and makes it look like it shouldn't be too hard to add support for it in Python's ssl module. Update: Openssl 3.5 is out with server support. There shouldn't be any more roadblocks from the openssl side :P |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: