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:
Windows:"scripts": { "dev": "NODE_TLS_REJECT_UNAUTHORIZED=0 next dev" }"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信任列表(更规范的本地方式)
- 导出Asp.net Core的自签证书:
打开浏览器访问API的HTTPS地址,点击地址栏锁图标 → 证书 → 详细信息 → 复制到文件,选择Base64编码的X.509格式,保存为localhost.cer。 - 配置Node.js信任该证书:
启动Next.js时通过环境变量指定额外信任的CA证书:
Mac/Linux:
Windows:NODE_EXTRA_CA_CERTS=/absolute/path/to/localhost.cer next devset NODE_EXTRA_CA_CERTS=C:\absolute\path\to\localhost.cer && next dev
方案3:让Next.js也使用HTTPS(推荐长期本地开发)
统一前后端协议,避免跨协议问题,同时使用受信任的本地证书:
- 用mkcert生成本地信任证书:
- 安装mkcert:Mac用
brew install mkcert,Windows可直接下载二进制文件 - 生成证书:执行
mkcert localhost,得到localhost.pem和localhost-key.pem
- 安装mkcert:Mac用
- 配置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')) } }; - 启动Next.js后,访问
https://localhost:3000,此时前后端均为HTTPS,证书受本地信任,不会出现验证错误。
内容的提问来源于stack exchange,提问作者Jenkins
相关产品推荐
相关产品推荐

