Angular 17调用API遇DEPTH_ZERO_SELF_SIGNED_CERT自签名证书错误求助
解决Angular调用API时的DEPTH_ZERO_SELF_SIGNED_CERT自签名证书错误
这个错误是因为你调用的目标API使用了自签名SSL证书,Angular的HTTP客户端默认不信任这类证书,而其他API用的是正规CA签发的证书,所以能正常运行。下面给你几种开发环境的解决办法(生产环境绝对不能用自签名证书,必须更换公共信任CA签发的证书):
临时绕过证书验证(仅开发测试用,禁止用于生产)
用Angular代理配置是相对安全的方式:- 在项目根目录新建
proxy.conf.json,写入以下内容:{ "/api": { "target": "https://你的目标API地址", "secure": false, "changeOrigin": true } } - 打开
angular.json,找到serve配置下的options,添加代理文件配置:"serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { "browserTarget": "你的项目名称:build", "proxyConfig": "proxy.conf.json" } } - 重启
ng serve,调用API时用相对路径/api/具体接口路径代替完整的HTTPS地址即可。
若要快速临时测试,也可以启动开发服务器时添加环境变量(此方法会让所有请求跳过证书验证,风险较高):
NODE_TLS_REJECT_UNAUTHORIZED=0 ng serve- 在项目根目录新建
将自签名证书导入本地信任存储(推荐长期开发使用)
这个方法能一劳永逸解决开发环境的证书信任问题:- 用浏览器打开目标API地址,点击地址栏的锁图标 → 证书 → 详细信息 → 复制到文件,保存为
.crt格式。 - 导入证书到系统信任库:
- Windows:双击
.crt文件 → 安装证书 → 选择「本地计算机」→ 下一步 → 选择「将所有证书放入下列存储」→ 浏览选择「受信任的根证书颁发机构」→ 完成。 - macOS:双击
.crt文件 → 打开钥匙串访问 → 选择「系统」钥匙串 → 找到刚导入的证书,右键选择「显示简介」→ 在「信任」栏将「使用此证书时」设置为「始终信任」。
- Windows:双击
- 重启浏览器和Angular开发服务器,再调用目标API就不会报错了。
- 用浏览器打开目标API地址,点击地址栏的锁图标 → 证书 → 详细信息 → 复制到文件,保存为
⚠️ 重要提醒:生产环境必须使用公共信任的CA签发的SSL证书(比如Let's Encrypt的免费证书),自签名证书会导致用户访问你的应用时出现安全警告,严重影响体验和安全性。
内容的提问来源于stack exchange,提问作者Wagner Vaz
相关产品推荐
相关产品推荐

