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

NextJS调用容器化ASP.NET Core Web API时出现DEPTH_ZERO_SELF_SIGNED_CERT错误

NextJS调用容器化ASP.NET Core Web API时出现DEPTH_ZERO_SELF_SIGNED_CERT错误

我来帮你分析并解决这个问题,你遇到的DEPTH_ZERO_SELF_SIGNED_CERT错误,核心原因大概率是你的ASP.NET Core API在强制将HTTP请求重定向到HTTPS,而NextJS在服务器端(因为你用了"use server")拒绝了API的自签名HTTPS证书。哪怕你只暴露了HTTP端口8080,这个重定向逻辑还是会触发,导致你看似调用HTTP接口,实际却被转到了HTTPS,进而触发证书错误。

下面分两种场景给出具体的解决方法,你可以根据自己的需求选择:

场景一:开发环境继续使用HTTP(快速解决)

如果只是想快速搞定问题,在开发环境暂时用HTTP,按以下步骤操作:

  1. 打开你的FitnessPlannerAPI项目的Program.cs文件,找到这行代码并注释掉:
    // app.UseHttpsRedirection();
    
    这行代码的作用是强制所有HTTP请求重定向到HTTPS,注释后API就会直接处理HTTP请求了。
  2. 保持你现有的Dockerfile和docker-compose.yml配置不变(只暴露和映射8080端口)。
  3. 重新构建并启动容器:
    docker-compose down
    docker-compose up --build
    
  4. 再次调用NextJS的接口,这时候HTTP请求不会被重定向,也就不会触发SSL证书错误了。

场景二:配置HTTPS(推荐,贴近生产环境)

如果想在开发环境模拟生产环境的HTTPS配置,避免后续上线踩坑,可以按以下步骤操作:

1. 调整Docker相关配置

  • 编辑Dockerfile,取消注释HTTPS端口的暴露:
    EXPOSE 8081
    
  • 编辑docker-compose.yml,添加HTTPS端口的映射(注意不要和HTTP的1337冲突):
    ports: 
      - "1337:8080"
      - "1338:8081"
    

2. 生成并信任自签名证书

在本地生成ASP.NET Core的自签名证书,并添加到系统信任存储:

  • 打开终端,运行以下命令(根据你的系统选择):
    # Windows
    dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\FitnessPlannerAPI.pfx -p YourSecurePassword123
    dotnet dev-certs https --trust
    
    # Mac/Linux
    dotnet dev-certs https -ep ~/.aspnet/https/FitnessPlannerAPI.pfx -p YourSecurePassword123
    dotnet dev-certs https --trust
    
    注意把YourSecurePassword123换成你自己的密码,后续配置会用到。

3. 配置容器的HTTPS环境变量

在docker-compose.yml的fitnessplannerapi服务中添加环境变量和证书挂载:

services:
  fitnessplannerapi:
    # 其他现有配置保持不变
    environment:
      - DB_HOST=fitnessplannersqlserver
      - DB_NAME=FitnessPlannerDB
      - DB_SA_PASSWORD=your-secure-pw
      # 新增HTTPS配置
      - ASPNETCORE_URLS=https://+;http://+
      - ASPNETCORE_HTTPS_PORT=8081
      - ASPNETCORE_Kestrel__Certificates__Default__Password=YourSecurePassword123
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/FitnessPlannerAPI.pfx
    volumes:
      # 挂载本地证书到容器,根据系统选择一行
      - ${USERPROFILE}\.aspnet\https:/https/  # Windows
      # - ~/.aspnet/https:/https/  # Mac/Linux

4. 修改NextJS的API地址

把fitnessPlannerAPICalls.ts中的apiEndpoint改成HTTPS的地址:

const apiEndpoint = 'https://localhost:1338/api/userinitialsetup/add';

5. 重启容器

运行以下命令重启容器,让配置生效:

docker-compose down
docker-compose up --build

额外排查技巧

如果你不确定是不是重定向的问题,可以用以下方法验证:

  • 在浏览器中直接访问http://localhost:1337/api/userinitialsetup/add,如果浏览器自动跳转到https://localhost:xxx,就说明API确实在强制HTTPS重定向。
  • 用curl命令查看响应头:
    curl -v http://localhost:1337/api/userinitialsetup/add
    
    如果输出中包含Location: https://xxx,也能确认是重定向导致的问题。

另外你提到的--experimental-https是NextJS自身的HTTPS配置,和API的HTTPS设置无关,所以这个参数解决不了你遇到的问题~

备注:内容来源于stack exchange,提问作者kamberoFF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:03:14