curl中HTTP/3/QUIC支持的TLS密码套件配置问题分析

本文详细分析了curl工具在使用--ciphers选项指定TLS密码套件时与HTTP/3/QUIC协议不兼容的问题,包括技术原理、复现步骤及影响范围,揭示了传统TLS配置与现代QUIC协议之间的兼容性问题。

TLS Cipher Misconfiguration in HTTP/3/QUIC Support

漏洞摘要

当使用curl命令的--ciphers选项手动指定TLS密码套件时,HTTP/3或QUIC协议将无法正常工作。这是因为QUIC协议不依赖于为TLS 1.2或更早版本定义的传统TLS密码套件,导致在尝试访问仅支持HTTP/3或QUIC的端点时出现连接失败。

技术细节

  1. curl实现问题

    • curl的--ciphers选项无法区分传统TLS协议(TLS 1.2/1.3)和QUIC协议
    • 当指定不兼容的密码套件时会导致配置冲突
  2. 协议不匹配

    • HTTP/3使用QUIC协议,该协议不与--ciphers选项指定的传统TLS密码套件协同工作

受影响版本

1
2
3
4
curl 8.11.1 (x86_64-pc-linux-gnu) libcurl/8.11.1 OpenSSL/3.3.2 zlib/1.3.1 brotli/1.1.0 zstd/1.5.6 c-ares/1.34.3 libidn2/2.3.7 libpsl/0.21.5 libssh2/1.11.1 nghttp2/1.64.0 nghttp3/1.6.0
Release-Date: 2024-12-11
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS brotli HSTS HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Largefile libz NTLM PSL SSL threadsafe TLS-SRP TrackMemory UnixSockets zstd

复现步骤

1
curl --disable -v --http3-only --ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA' https://1.1.1.1/cdn-cgi/trace

错误输出

1
2
3
4
5
6
*   Trying 1.1.1.1:443...
* failed setting cipher list: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:D
* QUIC connect to 1.1.1.1 port 443 failed: Could not use specified SSL cipher
* Failed to connect to 1.1.1.1 port 443 after 0 ms: Could not use specified SSL cipher
* closing connection #0
curl: (59) failed setting cipher list: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:D

影响范围

  1. 尝试使用curl的--ciphers选项进行HTTP/3或QUIC连接的用户会遇到连接失败
  2. 可能中断依赖curl与HTTP/3/QUIC服务器交互的自动化脚本

参考链接

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计