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

Next.js调用Asp.Net Core Web API遇DEPTH_ZERO_SELF_SIGNED_CERT错误

问题根源与解决方案

问题归属

这个错误是Next.js依赖的Node.js运行环境拒绝信任自签名SSL证书导致的,和API本身无关:

  • 浏览器能正常访问API:因为你可能已经手动在浏览器中信任了该自签证书
  • Postman能访问:因为你关闭了Postman的SSL验证开关
  • Next.js报错:因为Node.js默认会严格校验SSL证书的合法性,自签证书未被权威CA签发,所以被判定为不可信

本地开发环境的SSL证书处理方案

方案1:临时跳过SSL验证(仅本地开发用,禁止生产环境使用)

适合快速调试,两种实现方式:

  • 全局禁用:修改package.json的启动命令
    Mac/Linux:
    "scripts": {
      "dev": "NODE_TLS_REJECT_UNAUTHORIZED=0 next dev"
    }
    
    Windows:
    "scripts": {
      "dev": "set NODE_TLS_REJECT_UNAUTHORIZED=0 && next dev"
    }
    
  • 局部禁用:针对单个fetch请求配置Agent
    import https from 'https';
    
    // 创建跳过证书验证的Agent
    const insecureAgent = new https.Agent({ rejectUnauthorized: false });
    
    // 调用API时传入该Agent
    const res = await fetch('https://localhost:5001/api/your-endpoint', {
      agent: insecureAgent
    });
    

方案2:将自签证书导入Node.js信任列表(更规范的本地方式)

  1. 导出Asp.net Core的自签证书:
    打开浏览器访问API的HTTPS地址,点击地址栏锁图标 → 证书 → 详细信息 → 复制到文件,选择Base64编码的X.509格式,保存为localhost.cer。
  2. 配置Node.js信任该证书:
    启动Next.js时通过环境变量指定额外信任的CA证书:
    Mac/Linux:
    NODE_EXTRA_CA_CERTS=/absolute/path/to/localhost.cer next dev
    
    Windows:
    set NODE_EXTRA_CA_CERTS=C:\absolute\path\to\localhost.cer && next dev
    

方案3:让Next.js也使用HTTPS(推荐长期本地开发)

统一前后端协议,避免跨协议问题,同时使用受信任的本地证书:

  1. 用mkcert生成本地信任证书:
    • 安装mkcert:Mac用brew install mkcert,Windows可直接下载二进制文件
    • 生成证书:执行mkcert localhost,得到localhost.pem和localhost-key.pem
  2. 配置Next.js启用HTTPS并代理API请求:
    创建/修改next.config.js:
    const fs = require('fs');
    const path = require('path');
    
    module.exports = {
      // 代理API请求,避免跨域和证书问题
      async rewrites() {
        return [
          {
            source: '/api/:path*',
            destination: 'https://localhost:5001/api/:path*'
          }
        ];
      },
      // 启用HTTPS
      https: {
        key: fs.readFileSync(path.join(__dirname, 'localhost-key.pem')),
        cert: fs.readFileSync(path.join(__dirname, 'localhost.pem'))
      }
    };
    
  3. 启动Next.js后,访问https://localhost:3000,此时前后端均为HTTPS,证书受本地信任,不会出现验证错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:40:31