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呢?
- 使用谷歌开发的BoringSSL,它是openssl的fork版本。
- 使用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 」,也可搜索「 后浪笔记一零二四 」找到我。