系统极客一直在努力
专注操作系统及软件使用技能

Nginx 1.29.4 发布:支持原生 HTTP/2 上游与 ECH 加密

Nginx 1.29.4 正式发布!新版本带来了对上游(upstream)服务器的原生 HTTP/2 协议支持,落地了 Encrypted Client Hello(ECH)功能,并对 HTTP 分块传输编码实施了更严格的解析策略。为运维人员、安全团队和开发者,带来了更强的隐私保护与安全能力。

Nginx 1.29.4 主要更新

原生 HTTP/2 上游支持

Nginx 1.29.4 支持与上游服务器建立原生 HTTP/2 连接,真正实现了从客户端到后端服务的「端到端」HTTP/2 通信。

  • 此前,即便客户端与 Nginx 之间使用了 HTTP/2,Nginx 在把请求代理到上游服务器时,仍然会将连接降级为 HTTP/1.0。这就导致后端服务无法享受 HTTP/2 的多路复用、头部压缩等协议级性能优势。
  • 现在,你只需要在配置中添加 proxy_http_version 2; 指令,就能启用该功能
upstream backend {  
    server api.example.com:8443;  
    # 使用 HTTP/1.1 或 HTTP/2 连接时,建议设置 keepalive  
    keepalive 64;  
}  

server {  
    listen 443 ssl;  
    http2 on;  
    ssl_certificate server.crt;  
    ssl_certificate_key server.key;  

    location / {  
        proxy_pass <https://backend>;  
        # 启用 HTTP/2 协议代理到上游  
        proxy_http_version 2;  
    }  
}

新增 ECH 支持

新版本加入了对 Encrypted Client Hello(ECH)的支持。ECH 是 TLS 1.3 的一项前沿扩展,旨在加密 TLS 握手过程中,原本以明文传输的 SNI(服务器名称指示)字段。

  • 在没有 ECH 的情况下,SNI 会以明文形式发送,会暴露用户访问的域名——即使连接的其余部分已经加密。
  • 这就像一封信的内容被锁在保险箱里,但信封上却清晰写着收件人地址。而 ECH 通过加密整个 ClientHello 消息(包括 SNI),彻底封堵上了这一隐私漏洞。

你可通过ssl_ech_file指令指定一个包含 ECH 配置与私钥的 PEM 文件来启用该功能:

server {  
    ssl_ech_file /path/to/ech-keys.pem;  
    # ... 其他 SSL 相关配置  
}

ssl_ech_file支持配置多个文件,实现密钥的无缝轮换。以 Cloudflare 为例,它就会每小时轮换一次 ECH 密钥,来确保「持续安全」。

收紧 HTTP 分块传输编码解析

为了应对潜在的 HTTP Request Smuggling 等安全威胁,Nginx 1.29.4 收紧了对分块传输编码(Chunked Transfer Encoding)的解析策略:不再接受单一换行符(bare LF, \n)作为分块消息体中的行终止符。

  • 在过去,出于兼容性考虑,Nginx 会同时接受 CRLF(\r\\n)和 LF(\n)作为行终止符。
  • 从本版本起,Nginx 将严格遵循 HTTP/1.1 RFC 规范,仅允许使用 CRLF 序列,从而消除解析歧义,提升整体安全性。
赞(0)
分享到

评论 抢沙发