NGINX Full Version

借助 NGINX 实现 QUIC+HTTP/3 对 OpenSSL 的支持

开发人员通常希望使用已发布的官方支持库来构建应用和基础架构。即使有了 HTTP/3,他们也非常需要一个既能支持 QUIC 而又不会增加生产基础架构维护成本或操作复杂性的便捷库。

对于许多 QUIC+HTTP/3 用户而言,默认的加密库是 OpenSSL。OpenSSL 默认安装在大多数基于 Linux 的操作系统上,堪称首屈一指的传输层安全(TLS)库,已被大多数网络应用广泛使用。

 

问题:OpenSSL 与 QUIC+HTTP/3 不兼容

即便得到广泛使用,OpenSSL 也没有提供 QUIC 支持所需的 TLS API,于是 OpenSSL 管理委员会决定自行实现完整的 QUIC 堆栈。这项工作是 OpenSSL v3.4 计划中的一项重要工作,但根据 OpenSSL 路线图,不太可能在 2024 年底之前完成。此外,OpenSSL 实现的初始最小可行产物不包含 QUIC API 实现,因此目前尚不明确用户可如何在 OpenSSL 上获得对 HTTP/3 的支持。

QUIC TLS 支持选项

在这种情况下,对于寻求 QUIC TLS 支持以满足 HTTP/3 需求的用户而言,现有两种选择:

 

全新解决方案:OpenSSL 兼容层

NGINX 从这些挑战中受到启发,创建了 OpenSSL 兼容层,以简化使用 OpenSSL 的 QUIC+HTTP/3 部署,并帮助避免在生产环境中维护单独的 SSL 库所带来的复杂性。

OpenSSL 兼容层可搭配使用 NGINX 开源版的主线版(从版本 1.25.0 开始)NGINX Plus R30,允许 NGINX 在 OpenSSL 之上运行 QUIC+HTTP/3,而无需对其进行修复或重建。这消除了对编译和部署第三方 TLS 库以获得 QUIC 支持的依赖。由于用户无需使用第三方库,因此也不必依赖这些库的进度表和路线图,这让 OpenSSL 兼容层成为了相对更容易部署到生产环境中的解决方案。

OpenSSL 兼容层的工作原理

OpenSSL 兼容层执行以下步骤:

根据目前 OpenSSL 的采用率及其官方 QUIC+HTTP/3 支持状态,我们相信一个简单、可扩展的 QUIC 启用选项不仅是一大进步,而且还将促进 HTTP/3 的采用,并提供有价值的反馈。最重要的是,我们相信 OpenSSL 兼容层将帮助我们为企业用户和整个 NGINX 社区提供更强大、更具可扩展性的解决方案。

: 虽然我们通过 OpenSSL 兼容层的可用性确保为 NGINX 用户提供一个简单、可扩展的选项,但用户仍可选择在 NGINX 中使用第三方库,例如 BoringSSL、quicTLS 或 LibreSSL。如需确定最适合自己的方法,请考虑哪种方法最能满足您的需求,以及您对将库作为依赖项进行编译和管理的适应能力。

关于 0-RTT 的说明

0-RTT 是 QUIC 的一项功能,允许客户端在 TLS 握手完成之前发送应用数据。0-RTT 功能通过复用先前连接中的协商参数来实现,具体方法是客户端记住关键参数,并向服务器提供 TLS 会话票据,以便服务器恢复相同信息。

虽然该功能是 QUIC 的重要组成部分,但在 OpenSSL 兼容层中尚不受支持。如有需要使用 0-RTT 的特定用例,欢迎您积极反馈,以便我们制定路线图。

 

了解有关 NGINX 解决方案支持 QUIC+HTTP/3 和 OpenSSL 的更多信息

请立即开始使用 NGINX 的 OpenSSL 兼容层和 NGINX 开源版,或者开启 NGINX Plus 30 天免费试用。希望它对您有所帮助,欢迎提出反馈意见。

有关支持 QUIC+HTTP/3 和 OpenSSL 的 NGINX 解决方案的更多信息,请参阅以下资源。