Windows Server 2019+Node.js 21.7.3出现UNABLE_TO_VERIFY_LEAF_SIGNATURE错误求助
解决Node.js 21.7.3在Windows Server 2019上的UNABLE_TO_VERIFY_LEAF_SIGNATURE错误
问题背景
所有Windows Server 2019服务器运行Node.js 21.7.3时,使用Axios、node-fetch发起HTTPS请求均报UNABLE_TO_VERIFY_LEAF_SIGNATURE错误,访问包括google.com在内的任意HTTPS地址都失败,但curl命令可正常请求。测试代码如下:
const axios = require('axios'); axios.get('https://google.com') .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); });
核心原因
curl默认使用Windows系统根证书库完成验证,但Node.js 21.x默认采用自带的OpenSSL根证书集合,可能存在与系统证书不同步、根证书过期或未加载系统证书的问题。
可行解决方案
1. 强制Node.js使用系统根证书
Node.js v20.3.0及以上版本支持--use-system-ca参数,让Node.js直接调用Windows系统的根证书存储进行验证:
- 临时测试:运行脚本时添加参数
node --use-system-ca your-test-script.js
- 永久生效:在服务器的系统环境变量中添加
NODE_OPTIONS,值设为--use-system-ca,重启Node.js进程或服务器后生效。
2. 手动导出系统根证书并指定给Node.js
如果--use-system-ca参数无效,可手动导出Windows受信任根证书并配置给Node.js:
- 打开
certmgr.msc,依次展开「受信任的根证书颁发机构」→「证书」 - 选择常用的根证书(如DigiCert、GlobalSign等),右键选择「所有任务」→「导出」,选择Base64编码的X.509(.CER)格式完成导出
- 将多个导出的证书内容拼接成一个
.pem文件 - 设置系统环境变量
NODE_EXTRA_CA_CERTS,值为该.pem文件的完整路径,例如:
set NODE_EXTRA_CA_CERTS=C:\certs\trusted-roots.pem
3. 更新Node.js自带的OpenSSL根证书
Node.js自带的根证书集合可能过期,可手动更新:
- 获取最新的Mozilla根证书集合(PEM格式)
- 替换Node.js安装目录下
.\share\ssl\certs\ca-bundle.crt文件;或设置环境变量SSL_CERT_FILE指向下载的最新根证书文件路径
4. 检查代理与防火墙配置
虽然curl请求正常,但需确认Node.js进程的代理配置与curl一致:
- 检查系统环境变量
HTTP_PROXY、HTTPS_PROXY是否正确配置 - 临时关闭代理或防火墙,测试请求是否恢复正常
临时调试方案(生产环境禁用)
仅用于快速排查问题,绝对不要在生产环境使用:
const axios = require('axios'); const https = require('https'); axios.get('https://google.com', { httpsAgent: new https.Agent({ rejectUnauthorized: false // 禁用证书验证 }) }) .then(response => console.log(response)) .catch(error => console.log(error));
内容的提问来源于stack exchange,提问作者ShobiDobi
相关产品推荐
相关产品推荐

