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

使用SSL代理的Next.js调用HTTPS API仍遇UNABLE_TO_VERIFY_LEAF_SIGNATURE错误

问题分析与解决方案

一、错误UNABLE_TO_VERIFY_LEAF_SIGNATURE的产生原因

这个错误的核心是Node.js环境下的TLS客户端(即你的axios实例)无法验证目标服务器SSL证书的签名有效性,和你处理入站HTTPS请求的local-ssl-proxy配置无关,具体触发场景包括:

  • 目标服务器返回的证书链不完整:仅提供了服务器自身的叶子证书,未附带中间CA证书,导致Node.js无法通过内置的根CA信任池完成整个证书链的追溯验证。
  • 目标服务器使用内部CA颁发的证书:Node.js的默认根CA信任池仅包含公共权威CA,不包含你们公司内部的CA证书,因此无法验证内部证书的合法性。
  • 注意:浏览器和Node.js的CA信任池是相互独立的——你用公共CA证书处理入站请求时浏览器能正常信任,但Node.js发起出站请求时遵循自己的信任规则,两者互不影响。

二、优雅解决方案(不依赖额外Web服务器/自定义Next.js服务器,不破坏路由)

方案1:给axios实例配置指定的信任CA

如果目标服务器的证书问题源于缺少中间CA或使用内部CA,可以直接在axios实例中添加信任的CA证书,仅对该实例的请求生效,不会全局降低安全性:

import axios from 'axios';
import https from 'https';
import fs from 'fs';
import path from 'path';

// 读取需要信任的CA证书文件(比如中间CA或内部CA的pem文件)
const trustedCa = fs.readFileSync(
  path.join(process.cwd(), './certs/trusted-ca.pem'),
  'utf8'
);

// 创建带自定义CA的axios实例
const apiClient = axios.create({
  httpsAgent: new https.Agent({
    ca: trustedCa
  })
});

// 使用该实例发起请求
apiClient.get('https://target-service.company.com/api')
  .then(res => console.log(res.data))
  .catch(err => console.error(err));

方案2:通过Node.js环境变量添加额外信任CA

使用NODE_EXTRA_CA_CERTS环境变量,让Node.js在默认根CA之外额外信任指定的CA证书,无需修改代码,仅调整启动脚本即可:

NODE_EXTRA_CA_CERTS=./certs/trusted-ca.pem local-ssl-proxy --key ./certs/key.pem --cert ./certs/cert.pem --source 3000 --target 3001 & next dev -p 3001

这个方法会全局作用于当前Node.js进程,但仅添加信任而非禁用验证,安全性远高于NODE_TLS_REJECT_UNAUTHORIZED=0,且完全不影响Next.js的原有路由和功能。

方案3:修复目标服务器的证书链配置

如果目标服务器是你们公司内部服务,联系运维人员确认服务器是否配置了完整的证书链(需包含服务器证书+所有层级的中间CA证书)。很多时候这个错误是因为服务器仅部署了叶子证书,缺失中间CA导致验证失败,修复服务器配置后本地无需任何额外设置即可正常请求。

内容的提问来源于stack exchange,提问作者Changdae Park

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:57:51