curl 8.22 预览:HTTPS 代理 TLS-SRP 停用前的迁移审计

curl 8.22.0 于 2026 年 8 月 26 日进入第三个候选版本,正式版计划在 9 月 2 日发布。当前 curl 手册已经把 TLS-SRP 命令行选项标记为弃用,并注明从 8.22.0 起不再具有功能。对 HTTPS 代理而言,相关选项包括 --proxy-tlsauthtype--proxy-tlsuser--proxy-tlspassword

这是范围明确的兼容性变化,不是取消 HTTPS 代理,也不是删除普通 HTTP 代理认证。使用证书验证的 HTTPS 代理、Basic、Digest、Negotiate 或其他受支持认证方式的团队,不应直接判断自己受到影响。风险集中在明确请求 TLS-SRP、由封装脚本偷偷生成这些参数,或依赖早已被遗忘的编译功能的配置。

哑光陶瓷互联网网关模型将流量从停用的认证分支重新路由

具体改变了什么

TLS-SRP 是一种基于用户名和密码的 TLS 认证机制。在 curl 中,目标服务器连接可通过 --tlsauthtype SRP 选择,连接 HTTPS 代理则可使用 --proxy-tlsauthtype SRP,配套的 user 与 password 选项提供 SRP 凭据。

curl 项目说明 TLS-SRP 无法配合 TLS 1.3 或 QUIC,并且实际使用极少。8.22 文档仍保留相关选项,方便发现旧配置,但明确写明这些选项从 8.22.0 起不再发挥作用。

运营上不能只看脚本是否启动。旧命令可能仍被解析,却不再执行预期认证。迁移测试必须证明实际连接路径和认证结果。

不要混淆三层认证

HTTPS 代理连接可能同时包含三个独立控制:

层级目的典型证据
代理 TLS 身份验证 HTTPS 代理提供的证书可信证书链、正确主机名、协商 TLS 版本
到代理的 TLS-SRP旧式 TLS 层用户名密码认证明确 TLS-SRP 选项及支持该功能的 TLS 后端
HTTP 代理认证在代理协议内部认证客户端407 挑战与 Proxy-Authorization 交换

移除 TLS-SRP 不等于关闭证书验证,也不表示 --proxy-user 或受支持的 --proxy-auth 方式消失。迁移记录必须分开写清三层,避免把 HTTP 认证成功误当成旧 TLS-SRP 仍然有效。

升级前定位受影响配置

搜索代码仓库、部署模板、CI 变量、容器入口、任务调度器、运行手册和生成命令,覆盖以下 CLI 关键词:

--proxy-tlsauthtype
--proxy-tlsuser
--proxy-tlspassword
--tlsauthtype
--tlsuser
--tlspassword

同时检查 libcurl 中等价的 TLS 认证配置。CI 结果不得打印密码,只报告文件、配置负责人、环境、选项名和密钥引用编号。

为每个匹配项分类:

  • 活跃: 当前生产、预发布或定时任务会执行。
  • 生成: 封装器或 SDK 自动生成,手册中看不到。
  • 休眠: 镜像、示例或回退路径中仍可被启用。
  • 仅文档: 只存在于说明或测试文本,不影响连接。
  • 误报: 词语存在,但不是 curl 或 libcurl 配置。

只有负责人确认该路由是否仍需要,盘点才算完整。

建立当前基线

修改 curl 前,用当前部署版本、完全相同的代理路径复现一个获准请求,记录:

  • curl 与 libcurl 版本;
  • TLS 后端及其版本;
  • 代理 scheme、主机标签、端口和请求地区;
  • 解析后的代理地址与 IP 家族;
  • 代理证书主题、签发者、有效期和验证结果;
  • 协商 TLS 版本与密码套件;
  • 是否出现 407,以及选择了哪种 HTTP 代理认证;
  • 最终响应类型、退出码、总耗时和 UTC 时间。

凭据和令牌必须脱敏。需要证明使用同一个测试身份时,保存加盐指纹或密钥管理器引用,不保存明文。

基线应通过受控目标建立。请求一个无关公开页面成功,不能证明企业 HTTPS 代理、认证政策与证书信任路径正确。

安全测试 8.22 候选版

curl 项目明确表示候选版只用于测试,不用于生产。把 rc3 放入隔离构建、一次性容器或预发布工作节点。

  1. 按软件供应链制度验证候选包。
  2. 记录构建功能和 TLS 后端,不能假设测试二进制与生产一致。
  3. 原样运行旧配置,观察真实连接行为。
  4. 移除 TLS-SRP 参数,用计划替代配置再次执行。
  5. 分别测试正确凭据、错误凭据、不受信代理证书、主机名不匹配和直接连接对照。
  6. 比较代理解析地址、TLS 协商、407 流程、出口 IP、响应类型和耗时。
  7. 确认失败后任何封装器都不会绕过代理直接重试。

负向测试非常重要。如果故意使用错误代理凭据仍成功,可能发生了认证绕过、连接缓存复用、继承其他凭据或直接连接。

按原始需求选择替代方案

不要随便找一个 curl 参数替代 TLS-SRP。先确认旧配置想解决什么问题。

如果需求是验证 HTTPS 代理身份,应使用正常 TLS 证书和主机名验证以及获批信任库;需要客户端证书时,按代理支持的策略显式配置。

如果需求是在 HTTP 代理层认证,使用 curl 与代理双方支持的认证方法,并从密钥管理器注入,避免凭据出现在进程列表。

如果需求是防止凭据被窃听,连接代理的 HTTPS 传输和严格证书验证仍不可缺少;认证方法不能替代传输验证。

如果业务确实依赖 TLS-SRP 且没有替代方案,不要发布未经评审的绕过方案。记录依赖、隔离工作负载、联系代理或应用负责人;旧 curl 版本只能在有负责人、有补偿控制和明确到期日的例外下暂时保留。

建立验收矩阵

测试预期结果
证书和凭据都正确请求经过代理并到达获批目标
代理凭据错误认证失败,且不直接回退
代理证书不受信在发送业务数据前 TLS 验证失败
代理主机名不匹配连接关闭失败
代理不可用在规定超时内失败,不静默绕过
IPv4 与 IPv6各自遵循预期代理及 DNS 策略
粘性会话出口身份在约定边界内保持稳定

完整抓包可能暴露客户数据时,保存不含数据包的证据摘要。curl 详细日志也可能包含请求头和连接细节,对外分享前必须脱敏。

灰度与回滚

按工作负载组推进,而不是一次替换所有 curl。先跑合成探针,再跑低风险流量,最后按比例放量生产。

部署前定义回滚信号:代理连接失败、证书错误、407 比例异常、发现直连、出口地区漂移或延迟显著恶化。回滚包应记录旧二进制或镜像摘要和旧配置,但不能恢复已过期密钥。

curl 8.22.0 正式版发布后,还要对签名正式构建重复测试。候选版结果能降低风险,不能替代正式版验收。

相关检查可继续阅读 98IP 的代理 407 认证故障诊断代理诊断文件安全脱敏curl IPv6 作用域行为测试

迁移检查清单

  • [ ] 已搜索六个 CLI TLS-SRP 选项及等价 libcurl 配置。
  • [ ] 已分类活跃、生成、休眠、仅文档和误报项。
  • [ ] 已记录当前 curl、TLS 后端、代理路由和认证基线。
  • [ ] 候选版只在隔离环境测试。
  • [ ] 正确与错误凭据均产生预期结果。
  • [ ] 证书、主机名、超时、IPv4、IPv6 和直连回退检查通过。
  • [ ] 替代方案匹配原始需求,而不只是压掉报错。
  • [ ] 凭据与详细日志已脱敏。
  • [ ] 灰度、回滚阈值、负责人和例外到期日已记录。
  • [ ] 正式版发布后将重新验收。

常见问题

curl 8.22 是否移除了 HTTPS 代理?

没有。变化是移除 TLS-SRP。HTTPS 代理传输、证书验证和受支持 HTTP 代理认证属于不同能力。

保留旧 TLS-SRP 参数时 curl 一定会报错吗?

不要依赖解析失败。当前手册写明这些选项从 8.22.0 起弃用且没有功能,应通过连接和负向测试验证实际行为。

rc3 可以用于生产吗?

curl 项目明确要求候选版只用于测试与验证。正式生产前必须用签名正式版本重新测试。

能否无限期保留旧 curl?

这会积累维护和安全风险。只有没有替代方案时才能使用有负责人和到期日的临时例外,并持续跟踪退出计划。

合规说明

只测试获准使用的代理、凭据、目标和网络。避免密钥进入命令历史与进程列表,最小化诊断数据并限制访问。兼容性迁移不能降低证书验证、启用直接回退或掩盖认证失败。

内部研究说明:curl 于 2026 年 8 月 26 日发布 8.22.0-rc3,正式版计划于 9 月 2 日发布。当前 curl 手册将 TLS-SRP 选项标记为从 8.22.0 起弃用且无功能。外部资料地址仅保存在内部运营记录中。