You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:

  1. 打开certmgr.msc,依次展开「受信任的根证书颁发机构」→「证书」
  2. 选择常用的根证书(如DigiCert、GlobalSign等),右键选择「所有任务」→「导出」,选择Base64编码的X.509(.CER)格式完成导出
  3. 将多个导出的证书内容拼接成一个.pem文件
  4. 设置系统环境变量NODE_EXTRA_CA_CERTS,值为该.pem文件的完整路径,例如:
set NODE_EXTRA_CA_CERTS=C:\certs\trusted-roots.pem

3. 更新Node.js自带的OpenSSL根证书

Node.js自带的根证书集合可能过期,可手动更新:

  1. 获取最新的Mozilla根证书集合(PEM格式)
  2. 替换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:27:35