后浪笔记一零二四

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    listen 443 quic reuseport;
    listen [::]:443 quic reuseport;
    http2 on;

    # 省略...
}
  • 从 Nginx 1.25.0 开始,不再支持在 listen 中使用 http3 参数,需要修改为 quic;
  • 从 Nginx 1.25.1 开始,不再支持在 listen 中使用 http2 参数,需要单独一行 http2 on;
  • listen 中不能同时使用 ssl 和 quic 参数,须分为两行;
  • listen 段中的 reuseport 复用端口参数在所有 server 块里只允许出现一次;
  • 开启 0-RTT 可能会遭受重放攻击。

问题:openssl没有提供quic支持所需的TLS API。

openssl对基于TCP的TLS 1.3协议的支持是比较好的,但是对基于UDP的TLS 1.3协议的支持并不完整。

openssl决定自行实现完整的QUIC堆栈,而不是仅仅实现基于UDP的TLS 1.3,这项工作目前并没有在openssl v3.4版本中实现,大概率在openssl v3.5实现。

openssl的目标是封装实现QUIC的所有功能,使HTTP/3用户能够更轻松地使用 openssl TLS API,而不是提供特定于QUIC的实现。

在openssl准备好之前,如何提前使用上quic呢?

  1. 使用谷歌开发的BoringSSL,它是openssl的fork版本。
  2. 使用nginx内置的openssl兼容层,但是不支持0-RTT,也就是不支持early data

nginx的openssl兼容层(不支持0-RTT)

nginx 1.25.0版本开始新增了openssl兼容层的功能,它允许nginx在openssl之上运行QUIC+HTTP/3。这消除了编译和部署第三方 TLS 库以获得 QUIC 支持的依赖性。

OpenSSL 兼容层实现了以下步骤:

  • 将 QUIC 握手转换为 OpenSSL 支持的 TLS 1.3 握手。
  • 将 TLS 握手消息传递进和传出 OpenSSL。
  • 从 OpenSSL 中获取握手和应用程序加密级别的加密密钥。
  • 将 QUIC 传输参数传递进和传出 OpenSSL。

0-RTT是TLS 1.3开始引入的一个概念。

Early data和0-RTT实际上是指同一功能的不同方面:early data是从数据传输的角度描述这一特性,即在握手完成前就可以发送的数据;而0-RTT则是从性能优化的角度来看待这个问题,强调的是无需往返时间即可恢复会话并开始数据传输的能力。


本文发表于 0001-01-01,最后修改于 0001-01-01。

本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。


上一篇 « 下一篇 »

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image