← 中文资源

简体中文版本

Node.js 报 unable to verify the first certificate

通过修正 CA 信任与所呈现的证书链(而非关闭校验)解决 Node 中的 TLS 校验错误。

阅读英文原文

症状

Node 发出的 HTTPS 请求以 unable to verify the first certificate 或 self-signed certificate in certificate chain 失败,而 curl 或浏览器却能正常连接。差异通常来自 Node 历史上自带 CA 库而非使用系统库,以及服务端省略了中间证书——浏览器会去补取,Node 则不会。

诊断

用 openssl s_client -showcerts 查看服务端呈现的链;检查 NODE_EXTRA_CA_CERTS;显式带上 CA 再试以确认缺失信任。

openssl s_client -connect host:443 -servername host -showcerts

根因

Node 无法由服务器证书构建到受信任根的链,因为呈现的链缺少中间证书,或 Node 使用的信任库中没有该签发 CA。

修复

修服务端使其发送完整链;以 NODE_EXTRA_CA_CERTS 把所需 CA 加入环境信任。优先修正信任而非关闭校验。

验证

重新连接确认无 TLS 错误,并确认证书针对预期签发者校验通过。受信任的链加上成功请求即证明修复。

常见陷阱

在代码里设置 rejectUnauthorized:false 会全局关闭校验;只应针对已知可信的私有环境做显式、局部的例外。