先保留完整错误,不要急着加 -k
Linux 终端中看到 curl: (60) SSL certificate problem,先看后面的解释:缺少本地签发者、证书过期和主机名不匹配,不是同一种问题。请记下目标域名、错误文字和发生时间。报错并不说明“VPN坏了”,也不应直接通过关闭证书验证处理。
本文针对命令行 curl。先用 curl --version 确认当前程序;浏览器正常而 curl 失败时,两者使用的信任来源或网络路径可能不同。
1. 查看时间,再发一次最小请求
date -Is
curl --disable --connect-timeout 3 --max-time 10 --head https://example.com
把示例换成出错的网站根地址。先核对电脑时间是否明显错误;确认是时间问题时,通过系统日期设置恢复正确时间,再重试。--disable 放在第一位,用来排除个人 .curlrc 的额外选项,并不会取消环境变量代理。
只记录错误部分,不把完整账号链接或带凭据的调试日志公开。
2. 区分单个网站还是多个网站
| 观察 | 下一步 |
|---|---|
| 只有一个网站报证书过期或名称不符 | 比较地址栏是否输错域名、系统日期是否正确;两者正常时由站点维护方更换证书 |
| 多个普通 HTTPS 网站同时失败 | 继续检查系统时间、本机信任来源以及网络中是否存在代理 |
| 同一目标只有代理路径失败 | 核对代理是否使用组织证书,与管理方确认后再处理 |
| 浏览器正常,只有某个 curl 环境失败 | 确认是不是容器、另一台机器或不同 TLS 后端 |
有些单位网络会使用自己的证书链。不要把这一情况直接认定为攻击,也不要因此接受来源不明的 CA。
3. 有可信 CA 文件时,先做单次验证
如果网站或单位管理员通过你能确认身份的渠道提供了 CA 文件,先核对文件来源与指纹,再指定给这一次请求:
curl --disable --cacert ./trusted-ca.pem --connect-timeout 3 --max-time 10 --head https://example.com
trusted-ca.pem 是占位文件名,不是让你创建一个空文件。它必须是你已确认应信任的证书文件,而且目标域名也要匹配。命令结束后不会修改全系统信任库。
如果仍然报过期、名称不匹配或缺少链,保留新错误继续核对,不把 --cacert 理解成“强制成功”。系统信任库如何更新取决于发行版或组织管理方式,不要照搬其他系统的安装命令。
4. 怀疑代理时怎样做对照
可用代理检查脚本与教程对同一根地址比较继承代理与直连。只有在当前网络允许直连时,这个比较才有意义;也可能两条路径都报证书错误。
代理工具退出、改用另一个网络或指定 CA,都是不同变量。每次只改一个,才能知道哪一步改变了结果。
怎样算处理结束?
目标 HTTPS 请求在开启证书验证的条件下完成,才说明这个请求通过了相应验证。HTTP 401 或403还可能是登录、权限问题,应另外处理。
如果证书验证通过但返回401或403,证书这一步已经完成,接着处理目标的登录或访问权限;不再继续换CA文件。单次使用--cacert不会更改系统信任库,下次不用该参数即恢复默认信任来源。
参考资料
- curl TLS证书验证说明 · 资料日期 2026-10-22
- curl 使用手册 · 资料日期 2026-10-22