LabHub
学习 学习路径 课程

网络基础

TLS — 浏览器能过而 curl 失败的原因

在 LabHub 中继续学习

一句话总结

TLS 验证会把服务器证书链连接到受信任根证书。浏览器可能自动补全缺失的中间证书,而 curl 通常不会。

概念图: 一句话总结 · 诊断要点 · 判断标准

诊断要点

服务器配置不完整时常见错误如下:

curl: (60) SSL certificate problem: unable to get local issuer certificate

不要用 -k 掩盖问题。TLS 1.3 的 ClientHello 携带 SNI 和 ALPN;使用 openssl s_client 时必须提供 -servername,否则可能看到默认虚拟主机证书。服务器应发送除根证书外的完整链。浏览器可通过 AIA URL 下载缺失证书,而 OpenSSL 默认不这样做,因此浏览器成功、curl 失败通常意味着服务器有误。

执行 openssl s_client -connect 호스트:443 -servername 호스트 -showcerts,查看 Certificate chain。常见错误包括 unable to get local issuer certificatehostname mismatchcertificate has expiredx509: certificate signed by unknown authority。现代客户端以 subjectAltName 验证主机名;过期错误也可能来自客户端时钟;最小镜像还可能缺少信任库。

判断标准

应修复服务器证书链,而不是关闭验证;也应能根据链中证书数量定位缺失的中间证书。