首页
/ curl --tlsauthtype 详解:TLS-SRP 认证类型参数与 8.22.0 弃用说明

curl --tlsauthtype 详解:TLS-SRP 认证类型参数与 8.22.0 弃用说明

2026-09-09 15:06:29作者:董斯意

本篇指南聚焦 curl 命令行工具中的 --tlsauthtype 选项:它用于设置 TLS 认证类型(当前唯一支持 SRP,即 RFC 5054 定义的 TLS-SRP),并与 --tlsuser--tlspassword 协同完成基于用户名/口令的 TLS 认证。读完本文你将掌握该选项的语法、默认行为、依赖的 libcurl 编译条件、配套参数,以及它在 8.22.0 版本后已被弃用的现状和替代思路,同时了解其在 curl 源码中的实现与废弃痕迹。

一、选项概览:用途、语法与元信息

--tlsauthtype 用于为 TLS 连接指定认证类型,是 curl TLS 认证三件套(--tlsauthtype / --tlsuser / --tlspassword)中的类型声明部分。该选项的官方元信息如下(见 docs/cmdline-opts/tlsauthtype.md):

元信息项 说明
Long --tlsauthtype 长选项名
Arg <type> 参数为认证类型字符串
Help TLS authentication type 帮助文本描述
Protocols TLS 仅作用于 TLS 协议场景
Added 7.21.4 自 7.21.4 版本引入
Category tls auth 归类为 TLS 认证
Multi single 单值选项,重复指定时最后一次生效
See-also tlsuser 常与 --tlsuser 搭配使用

官方示例用法:

curl --tlsauthtype SRP $URL

其中 $URL 是目标地址。实际使用时,该选项通常与用户名、口令选项一起出现:

curl --tlsauthtype SRP --tlsuser <user> --tlspassword <password> <URL>

参数取值与默认行为

  • 当前唯一支持的取值是 SRP,对应 TLS-SRP 认证(Secure Remote Password,安全远程口令协议,见 RFC 5054)。
  • 默认值规则:如果指定了 --tlsuser--tlspassword,但没有显式指定 --tlsauthtype,则该选项自动默认为 SRP。也就是说,只要你想用 TLS-SRP 认证,三件套中最核心的其实是用户名与口令,类型声明可以省略。
  • 功能生效前提:只有底层 libcurl 以 TLS-SRP 支持编译时该选项才真正可用,这要求使用带 TLS-SRP 支持的 OpenSSL 或 GnuTLS

弃用状态(重要)

该选项自 curl 8.22.0已无任何实际功能(官方原文:"Deprecated option. This has no functionality since 8.22.0.")。这意味着在新版本中,即使传入 --tlsauthtype SRP,它也不会再触发任何 TLS-SRP 认证行为,选项保留仅为兼容历史脚本与命令行。

二、配套参数:--tlsuser 与 --tlspassword

--tlsauthtype 并非独立使用,它描述的是由 --tlsuser / --tlspassword 提供的凭据所采用的认证方式。两个配套参数同样自 7.21.4 引入,并同样在 8.22.0 弃用:

  • --tlsuser <name>:设置用于 TLS 认证的用户名,需配合 --tlspassword 使用;官方文档还特别注明该方式不适用于 TLS 1.3(见 docs/cmdline-opts/tlsuser.md)。
  • --tlspassword <string>:设置用于 TLS 认证的口令,需配合 --tlsuser 使用;同样不适用于 TLS 1.3(见 docs/cmdline-opts/tlspassword.md)。

三者组合的完整示例(源自官方文档):

curl --tlspassword pwd --tlsuser user $URL

由于 --tlsauthtype 默认即 SRP,上面的写法在功能上等价于显式写出 --tlsauthtype SRP

HTTPS 代理场景的等价选项

在 HTTPS 代理(-x https://...)的上下文中,curl 还提供了同族选项 --proxy-tlsauthtype(自 7.52.0 引入,8.22.0 弃用),与 --tlsauthtype 等价但作用于代理连接,配套参数为 --proxy-tlsuser--proxy-tlspassword(见 docs/cmdline-opts/proxy-tlsauthtype.md):

curl --proxy-tlsauthtype SRP -x https://proxy.example $URL

官方文档指出其功能约束与 --tlsauthtype 一致:仅支持 SRP,且仅在底层 libcurl 以 TLS-SRP 支持编译时才可用。

三、TLS-SRP 认证机制简介

要理解 --tlsauthtype SRP 的意义,需要先了解它背后的协议。TLS-SRP 是基于 SRP(Secure Remote Password) 协议扩展出的 TLS 认证套件,由 RFC 5054 定义。其核心价值在于:

  • 使用用户名 + 口令即可完成客户端与服务端的双向认证,无需部署 X.509 证书体系(无需 CA、无需签发证书);
  • 口令不会在网络上以明文传输,即使服务端数据库泄露,攻击者也无法直接利用口令哈希冒充客户端(抵抗字典攻击与中间人攻击的能力优于传统口令认证);
  • 适合对成本敏感、不希望引入 PKI 基础设施的内网或私有服务场景。

在 curl 的实现中,这要求 TLS 后端为 OpenSSLGnuTLS 且编译时开启了 TLS-SRP 支持。若底层 libcurl 未包含该能力,即便传入了 --tlsauthtype SRP 也无法完成认证。

四、源码层面的实现与废弃痕迹

从当前仓库源码可以确认该选项的完整生命周期,这也印证了文档中"8.22.0 起无功能"的描述:

1. libcurl 公开 API 已标记弃用

include/curl/curl.h 中,CURLOPT_TLSAUTH_TYPE 被声明为已弃用选项,并注明弃用版本与原因:

/* Set authentication type for authenticated TLS */
CURLOPTDEPRECATED(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206,
                  8.22.0, "Support was removed"),

同文件还保留了历史常量定义(include/curl/curl.h#L2415-L2416),可供读者理解曾经的取值体系:

#define CURL_TLSAUTH_NONE 0L
#define CURL_TLSAUTH_SRP  1L

2. setopt 中直接返回"未内置"

lib/setopt.c#L2429-L2435 中,包括 CURLOPT_TLSAUTH_TYPE 在内的全部 TLS 认证相关选项(用户名、口令、类型,以及代理版本)统一走 CURLE_NOT_BUILT_IN 分支:

case CURLOPT_TLSAUTH_USERNAME:
case CURLOPT_TLSAUTH_PASSWORD:
case CURLOPT_TLSAUTH_TYPE:
case CURLOPT_PROXY_TLSAUTH_USERNAME:
case CURLOPT_PROXY_TLSAUTH_PASSWORD:
case CURLOPT_PROXY_TLSAUTH_TYPE:
  return CURLE_NOT_BUILT_IN;

这从实现层面证实:设置这些选项现在只会得到"功能未内置"的返回码,不再执行任何实际认证逻辑。

3. 命令行解析已加弃用标记

src/tool_getparam.c#L349-L351 中,tlsauthtypetlspasswordtlsuser 三个选项均带有 ARG_DEPR(deprecated)标记:

{"tlsauthtype",               ARG_STRG|ARG_TLS|ARG_DEPR, ' ', C_TLSAUTHTYPE},
{"tlspassword",     ARG_STRG|ARG_TLS|ARG_CLEAR|ARG_DEPR, ' ', C_TLSPASSWORD},
{"tlsuser",             ARG_STRG|ARG_TLS|ARG_CLEAR|ARG_DEPR, ' ', C_TLSUSER},

由此可见,curl 在命令行层仍解析并接受这些参数(避免破坏既有脚本),但在库实现层已完全移除其功能。

五、实际使用注意事项与替代思路

使用前提(历史版本)

在 8.22.0 之前的 curl 版本中,若要使用 --tlsauthtype SRP,需同时满足:

  1. 目标服务器支持 TLS-SRP 套件并配置了对应的用户口令文件;
  2. curl 使用带 TLS-SRP 支持的 OpenSSL 或 GnuTLS 编译(可通过 curl --version 的输出确认,或查阅构建配置);
  3. TLS 版本不高于 TLS 1.2——官方文档明确 --tlsuser / --tlspassword 不适用于 TLS 1.3。

8.22.0 及以后版本

  • 传入 --tlsauthtype / --tlsuser / --tlspassword 不会报语法错误,但不再产生任何认证效果
  • 如果你的工作流仍依赖 TLS-SRP 认证,需要评估服务端与客户端两侧的替代方案(例如改用客户端证书认证、预共享密钥或其他口令保护机制),并在升级 curl 前完成迁移测试;
  • 从源码看,调用 curl_easy_setopt(handle, CURLOPT_TLSAUTH_TYPE, ...) 将得到 CURLE_NOT_BUILT_IN,应用程序应据此调整错误处理逻辑。

六、小结

--tlsauthtype 是 curl 面向 TLS-SRP 认证场景的类型声明参数,历史上与 --tlsuser--tlspassword 组合使用,默认值为 SRP,并受制于底层 OpenSSL/GnuTLS 的 TLS-SRP 编译支持。它自 7.21.4 引入,在 8.22.0 起被正式弃用且功能移除——命令行参数仍被解析(ARG_DEPR),但 libcurl 的 CURLOPT_TLSAUTH_TYPE 已标记弃用并统一返回 CURLE_NOT_BUILT_IN。理解这些细节,既能帮助你在旧版本上正确排障,也能让你在新版本升级时做出有依据的迁移决策。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.76 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
860
1.35 K
docsdocs
暂无描述
Markdown
899
5.83 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
925
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.84 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
533
601
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.03 K
525
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
395