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

本地调用.NET Core WebAPI时Node.js应用出现自签名证书错误的求助

问题分析与解决方案

首先,这个DEPTH_ZERO_SELF_SIGNED_CERT错误的意思很明确:你的Node.js应用用node-fetch请求本地HTTPS API时,发现服务器使用的是自签名SSL证书,而Node.js的安全策略默认会拒绝信任这种未被权威证书颁发机构(CA)签发的证书,所以直接阻断了请求。

为什么React和Postman能正常访问?

  • 你的React应用运行在浏览器里,之前访问https://localhost:5001时,应该已经手动确认过信任这个自签名证书了,浏览器会记住这个信任关系,后续请求就不会再拦截。
  • Postman默认自带了跳过自签名证书验证的设置,所以它会自动忽略这类证书的安全警告。

而Node.js的node-fetch遵循严格的SSL验证规则,不会默认跳过自签名证书的检查,这就是问题的核心。

解决方案

1. 临时开发环境方案(快速解决)

如果你只是本地测试,可以让node-fetch跳过SSL证书验证,只需要借助Node.js的https模块创建一个自定义Agent:

import fetch from 'node-fetch';
import https from 'https';

// 创建一个不验证SSL证书的Agent
const insecureHttpsAgent = new https.Agent({
  rejectUnauthorized: false
});

async function fetchTeams() {
    const response = await fetch('https://localhost:5001/api/teams', { 
        method: 'GET',
        agent: insecureHttpsAgent // 应用这个Agent
    });
    const data = await response.json();
    return data;
}

(async () => {
    console.log('Process started');
    try {
        const teams = await fetchTeams();
        console.log(teams);
    } catch (err) {
        console.error('Request failed:', err);
    } finally(() => {
        console.log('Process finished');
    });
})();

⚠️ 注意:这个方法严禁在生产环境使用,会完全绕过SSL证书验证,带来严重的安全风险。

2. 规范开发环境方案(推荐)

把你的.NET Core WebAPI的自签名证书添加到Node.js的信任列表中:

  1. 导出证书:打开浏览器访问https://localhost:5001,点击地址栏的锁图标 → 查看证书 → 导出为.pem格式的证书文件。
  2. 信任证书:启动Node应用时,通过环境变量指定额外信任的CA证书:
    NODE_EXTRA_CA_CERTS="/Users/aw/your-certificate-path/cert.pem" node your-app-file.js
    

这样Node.js就会信任这个自签名证书,不需要修改代码,同时保持了基本的安全规范。

3. 生产环境方案

生产环境绝对不能使用自签名证书,你需要从权威CA机构(比如免费的Let's Encrypt)申请合法的SSL证书,配置到你的.NET Core WebAPI服务器上。这样所有客户端(包括Node.js)都会默认信任这个证书,不会出现验证错误。

补充:为什么GitHub API没问题?

GitHub使用的是由权威CA签发的SSL证书,而Node.js的默认信任列表里已经包含了这些权威CA,所以node-fetch请求GitHub API时会正常通过证书验证,不会报错。

内容的提问来源于stack exchange,提问作者Adam Wojnar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:03:17