$ssl_early_data

变量 $ssl_early_data 指示在 SSL/TLS 连接中是否已接收到早期数据。 — NGINX Core (HTTP)

$ssl_early_data NGINX Core (HTTP)

说明

在 NGINX 中,当服务器配置为支持 TLS 1.3 时会使用 $ssl_early_data 变量,TLS 1.3 支持一种称为 "0-RTT"(或早期数据)的特性。该特性允许客户端在 TLS 握手完全完成之前发送数据,从而实现更快的通信,但同时存在一些安全方面的考量。当收到早期数据时,$ssl_early_data 的值被设置为 "1";否则设置为 "0"。 该变量在确定如何处理可能使用早期数据发送的请求时特别有用。例如,依赖早期数据可能会引入如重放攻击等风险,因此用户必须实现必要的逻辑来防范此类漏洞。NGINX 可以在条件配置中利用该变量的值,根据请求是否使用了早期数据来应用不同的限制或响应。

配置示例

server {
    listen 443 ssl;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        # Check if early data was received
        if ($ssl_early_data) {
            return 400;  # Reject early data requests if needed
        }
        # Normal processing for regular requests
        proxy_pass http://backend;
    }
}

子系统

http

可缓存

上下文

http, server, location, if

在未启用 TLS 1.3 支持的情况下使用 $ssl_early_data 将始终返回 0(无早期数据)。

如果在未实施适当安全措施的情况下认为早期数据处理是安全的,可能会导致漏洞。