本地获取API时自签名证书错误

问题描述 投票:0回答:3

我有一个简单的

.NET Core WebAPI
,没有身份验证。我使用默认策略添加了 Cors。我从 React 网站或 Postman 连接和获取数据没有问题(一切都在我的机器上本地运行)。现在,我尝试在超级简单的
node
应用程序中从该 API 获取数据,但收到此错误:

file:///Users/aw/Projects/TestNodeApp/node_modules/node-fetch/src/index.js:94
            reject(new FetchError(`request to ${request.url} failed, reason: ${error.message}`, 'system', error));
                   ^

FetchError: request to https://localhost:5001/api/teams failed, reason: self signed certificate
    at ClientRequest.<anonymous> (file:///Users/aw/Projects/TestNodeApp/node_modules/node-fetch/src/index.js:94:11)
    at ClientRequest.emit (node:events:394:28)
    at TLSSocket.socketErrorListener (node:_http_client:447:9)
    at TLSSocket.emit (node:events:394:28)
    at emitErrorNT (node:internal/streams/destroy:157:8)
    at emitErrorCloseNT (node:internal/streams/destroy:122:3)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  type: 'system',
  errno: 'DEPTH_ZERO_SELF_SIGNED_CERT',
  code: 'DEPTH_ZERO_SELF_SIGNED_CERT',
  erroredSysCall: undefined
}

这是我的整个

node
应用程序:

import fetch from 'node-fetch';

async function fetchTeams() {
  const response = await fetch('https://localhost:5001/api/teams', { method: 'GET' });
  const data = await response.json();
  return data;
}

(async () => {
  console.log('Process started');
  const teams = await fetchTeams();
  console.log(teams);
})().finally(() => {
  console.log('Process finished');
});

这是什么意思?我错过了什么?

顺便说一句。当我获取 Github API 时,它工作正常,如下所示:

async function fetchGithub() {
  const response = await fetch('https://api.github.com/users/Microsoft');
  const data = await response.json();
  return data;
}

所以我认为 API 中缺少一些东西。我的 React 网站不需要的东西,节点应用程序需要。

感谢您的帮助!

javascript node.js asp.net-web-api certificate asp.net-core-webapi
3个回答
5
投票

您可以使用此命令设置

NODE_TLS_REJECT_UNAUTHORIZED
环境变量:

export NODE_TLS_REJECT_UNAUTHORIZED=0

0
投票

我打开了您正在调用 API 的节点启动文件/js 文件,并在其中添加了以下代码行:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

如果您只想将此规则应用于测试/开发环境,您可以尝试这样做:

if ("development" == app.get("env")) {
  process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
}

-1
投票

尝试使用

dotnet dev-certs

信任自签名证书
dotnet dev-certs https --trust

有关更多详细信息,请访问此文档页面

© www.soinside.com 2019 - 2024. All rights reserved.