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

Angular 17 SSR刷新页面调用本地ASP.Net Core Web API遇fetch失败错误

刷新SSR页面时出现DEPTH_ZERO_SELF_SIGNED_CERT自签名证书错误的解决方案

问题根源

这个错误是SSR阶段服务端(Node.js环境)发起HTTP请求时,默认拒绝信任自签名证书导致的:

  • 刷新页面会触发完整的SSR流程,服务端直接向API发起请求,Node.js对自签名证书的校验规则比浏览器严格,直接抛出错误
  • 浏览器环境下,自签名证书会提示用户手动信任,所以客户端请求时不会直接报错;而同域名部署时,证书属于同一域名范畴,Node.js也不会触发校验

浏览器开发者工具看不到错误,是因为错误发生在服务端而非客户端请求流程中;toast无法关闭则是因为SSR阶段渲染的弹窗未完成客户端hydration,事件绑定失效。

解决方案

1. 开发环境临时快速解决(仅限开发,禁止生产使用)

在启动SSR项目时,通过环境变量禁用Node.js的证书校验:

NODE_TLS_REJECT_UNAUTHORIZED=0 ng serve --ssr

或者在服务端入口文件(比如main.server.ts)开头添加:

// 仅在开发环境启用,生产环境务必删除
if (environment.production === false) {
  process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
}

2. 开发环境更安全的方案

将你的自签名证书加入Node.js的信任列表:

  • 导出API的自签名证书为.pem格式
  • 启动项目时指定额外信任的证书:
NODE_EXTRA_CA_CERTS=/path/to/your/api-cert.pem ng serve --ssr

这种方式既解决了证书校验问题,又不会全局禁用所有证书校验,比第一种更安全。

3. 生产环境必选方案

替换自签名证书为受信任的合法SSL证书(比如Let's Encrypt提供的免费证书),生产环境绝对不能禁用证书校验或使用自签名证书,否则会带来严重的安全风险。

额外注意

  • 确保在服务端代码中,API请求的URL使用正确的HTTPS协议,避免混合内容问题
  • 如果使用Angular Universal,确认服务端模块的HTTP客户端配置和客户端一致,没有额外的证书校验逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:52:53