你把教程里的安装单行命令粘贴进去,按下回车,得到 curl: (77)。提示提到证书验证路径,于是直觉会认为 VPN 服务商的证书坏了,随手去找跳过验证的参数。这种理解是错的,照做会把本地文件问题变成安全决策。让我们从头捋一遍。

第 1 步:读懂这个数字的含义

错误 77 属于本地 CA 输入问题:curl 无法读取或加载它被告知要信任的证书材料。错误 60 才是对端的问题,即 服务器证书链验证不通过。教程里两者常常相邻出现,含义却相反。

如果输出是 77,服务器从来不是问题。客户端打不开它想用于校验的文件,这是你机器上的路径、权限或打包问题。

第 2 步:读你复制的那条命令

复制来的命令会藏字符。小写 -l 是 --list-only,用于列出协议。大写 -L 是 --location,用于跟随 HTTP 重定向。它们不是同一种写法的变体;教程写一个却描述另一个,会把人带进根本没人打算走的重定向路径。

跟随重定向既修不好信任库路径,也证明不了最终的宿主就是你想要的发布者。如果命令来自论坛帖子,请照项目自己的说明重新敲一遍,而不是相信粘贴的内容。

第 3 步:弄清这个构建用的是哪种 CA 输入

先识别二进制文件,因为答案取决于它是怎么编译的:

curl --version

记下版本和 TLS 后端。使用原生信任库的构建通过 TLS 库读取系统存储;指向捆绑包的构建则读取文件。显式的 --cacert、CURL_CA_BUNDLE 设置或 shell 包装脚本都可能覆盖其中任何一种,所以用软件包安装未必会碰到真正出问题的那个文件。

对于基于文件的存储,按顺序检查三件事:路径是否存在、调用命令的账户能否读取、其中是否含有你期望的 CA 材料。权限错误的捆绑包和缺失的捆绑包失败方式完全相同,而且两者都在任何关于服务器的网络对话发生之前就失败。

第 4 步:修输入,而不是关验证

通过拥有它的那一方恢复受支持的信任配置:发行版软件包、你的配置管理,或文档中写明的环境变量。目标是让该二进制文件拿到可读且正确的 CA 输入。

不要把 URL 换成 HTTP,不要加 --insecure,也不要相信从不明下载里复制来的证书。这些改法都只是在改变你愿意接受什么,而不是修复 curl 读不到的东西,而且改动往往会比事故本身活得更久。

这些数字的出处是 curl 错误目录,篇幅很短,值得认真读一遍。

第 5 步:先下载、再看、最后执行

把安装脚本取到文件里,而不是在同一条命令里直接管道给 shell。仅这一处改动,就把可检查的传输和以你的权限运行的代码分开了。

curl -fL -o vpn-installer.sh https://example.invalid/install.sh
file vpn-installer.sh
head -n 40 vpn-installer.sh

确认响应是你预期的脚本,而不是 HTML 错误页、重定向提示或空文件。如果发布者提供校验和或签名,请按他们文档化的发布流程验证,而不是照抄同一论坛帖子里给出的值。

记住 HTTPS 做了什么、没做什么。它认证了到你联系的宿主的传输;它没有审查脚本内容,也不会告诉你发布者是否可信。

第 6 步:把安装步骤分开

下载文件、安装客户端、配置隧道、验证路由是四件不同的事,各有各的失败方式。一件一件做,后面出错时就只有一个明显原因,而不是四个候选。

如果安装成功、隧道起来,在关单之前验证路由和一个真实目的地。只有当普通的 curl -I https://example.invalid 重新可用时,curl 报错才算修好,而不是安装脚本不再抱怨的时候。

相关文章