Node.js 向 OpenAI API 发出 HTTPS 请求时出现 SSL 证书错误

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

我正在开发一个 Node.js 应用程序,它使用 openai npm 包向 OpenAI 发出 API 请求。但是,我在尝试连接到 API 时遇到 SSL 证书错误。以下是我收到的错误消息:

Error: APIConnectionError: Connection error.
    at OpenAI.makeRequest (node_modules/openai/core.js:292:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
FetchError: request to https://api.openai.com/v1/chat/completions failed, reason: unable to get local issuer certificate

我尝试了以下解决方案,但都没有解决问题:

  1. 设置环境变量
    NODE_TLS_REJECT_UNAUTHORIZED=0
    以绕过 TLS/SSL 证书验证(不适合生产)。
  2. 在代码中使用自定义 https 代理和
    rejectUnauthorized: false
    来禁用请求的 SSL/TLS 验证。

这是我使用自定义 https 代理的代码片段:

const OpenAI = require("openai");
const https = require("https");

const agent = new https.Agent({  
  rejectUnauthorized: false
});

const openai = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY,
    agent
});

async function getCompletion() {
    try {
        const chatCompletion = await openai.chat.completions.create({
            messages: [{ role: "user", content: "Say this is a test" }],
            model: "gpt-3.5-turbo",
        });
        console.log(chatCompletion);
    } catch (error) {
        console.error("Error:", error);
    }
}

getCompletion();

尽管进行了这些尝试,我仍然收到 SSL 证书错误。这是我的设置:

Node.js 版本:14.17.0 操作系统:Windows 10 这个问题是否与我的 Node.js 配置、网络环境或其他原因有关?如何在不影响安全性的情况下解决此错误?任何帮助或建议将不胜感激!

node.js ssl https certificate openai-api
1个回答
0
投票

背景

SSL 请求的粗略上下文:服务器将向客户端提供一系列签名的 SSL 证书。客户端将通过将其与自己的证书存储进行比较,查找与该链匹配的 CA 根证书来验证该证书链是否受信任。

问题

您看到的错误是一种常见/通用错误,通常表示您的应用程序在自己的存储中找不到匹配的证书,因此无法验证服务器的证书。

Node.js 本身没有商店。默认情况下,它将使用根证书的硬编码列表,该列表在节点版本之间更新。

给出的 OpenAI 端点当前使用“GTS Root R1”作为根 CA 证书。该证书是在 node 18 中添加/更新的,这解释了为什么您无法在运行节点 14 时验证它。

解决方案

  1. 更新nodeJS。理想情况下是 LTS(当前为 v20.12.2),但至少是节点 18 才能获取更新的证书。
  2. 手动存储和引用 CA 证书。下载证书并在运行时选项中引用它(请参阅:如何将自定义证书颁发机构 (CA) 添加到 Nodejs)。可能还有一种方法可以直接使用
    https
    模块进行配置,但我不确定。
© www.soinside.com 2019 - 2024. All rights reserved.