开发人员通常希望使用已发布的、官方的和受支持的库来构建应用和基础设施。 即使使用 HTTP/3,也迫切需要一个支持 QUIC 的便捷库,并且不会增加生产基础设施的维护成本或操作复杂性。
对于许多QUIC+HTTP/3用户来说,默认的加密库是OpenSSL 。 OpenSSL 默认安装在大多数基于 Linux 的操作系统上,是第一大传输层安全性 (TLS) 库,被大多数网络应用使用。
即使用途如此广泛,OpenSSL 也没有提供支持 QUIC 所需的 TLS API。 相反,OpenSSL 管理委员会决定自行实现完整的 QUIC 堆栈。 这项工作是为 OpenSSL v3.4 计划的一项重大努力,但根据OpenSSL 路线图,这可能不会在 2024 年底之前实现。 此外,OpenSSL 实现的初始最小可行产品将不包含 QUIC API 实现,因此用户没有明确的途径通过 OpenSSL 获得 HTTP/3 支持。
在这种情况下,对于寻求 QUIC TLS 支持以满足其 HTTP/3 需求的用户来说,有两种选择:
在 NGINX,我们受到这些挑战的启发,并创建了 OpenSSL 兼容层,以简化使用 OpenSSL 的 QUIC+HTTP/3 部署,并帮助避免在生产环境中维护单独的 SSL 库所带来的复杂性。
OpenSSL 兼容层自 1.25.0 版起随 NGINX 开源主线和NGINX Plus R30提供,它允许 NGINX 在 OpenSSL 上运行 QUIC+HTTP/3,而无需修补或重建它。 这消除了编译和部署第三方 TLS 库以获得 QUIC 支持的依赖。 由于用户不需要使用第三方库,它也减轻了对这些库的计划和路线图的依赖,使其成为在生产中部署相对容易的解决方案。
OpenSSL 兼容层实现了以下步骤:
根据目前 OpenSSL 的采用量以及对其对官方 QUIC+HTTP/3 支持的状态,我们相信启用 QUIC 的简单且可扩展的选项是朝着正确方向迈出的一步。 它还将促进 HTTP/3 的采用并允许提供宝贵的反馈。 最重要的是,我们相信 OpenSSL 兼容层将帮助我们为企业用户和整个 NGINX 社区提供更为强大、可扩展的解决方案。
笔记: 虽然我们确保 NGINX 用户能够通过 OpenSSL 兼容层轻松且可扩展地使用,但用户仍然可以选择将 BoringSSL、quicTLS 或 LibreSSL 等第三方库与 NGINX 结合使用。要确定哪一种方式适合您,请考虑哪种方法最能满足您的要求,以及您对编译和管理作为依赖项的库的适应程度。
0-RTT 是 QUIC 中的一项功能,允许客户端在 TLS 握手完成之前发送应用数据。 通过重复使用以前连接中协商的参数,可以实现 0-RTT 功能。 它通过客户端记住关键参数并向服务器提供 TLS 会话票证来启用,从而允许服务器恢复相同的信息。
虽然此功能是 QUIC 的重要组成部分,但它尚不受 OpenSSL 兼容层支持。 如果您有需要 0-RTT 的特定用例,我们欢迎您的反馈以告知我们的路线图。
您现在就可以开始通过NGINX 开源使用 NGINX 的 OpenSSL 兼容层,或者开始30 天免费试用 NGINX Plus 。 我们希望您发现它有用并欢迎您的反馈。
有关使用 QUIC+HTTP/3 和 OpenSSL 的 NGINX 的更多信息,请参阅以下资源。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”