接受用于 undici 获取的自签名证书

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

对于具有自签名证书(

fetch('https://localhost:8888')
来自undici)的本地运行的HTTP服务器,我该如何做
fetch

javascript node.js fetch undici
4个回答
4
投票

如果您使用 Node.js 内置的

fetch
,您可以在 init 选项中指定
dispatcher

您仍然需要安装

undici
(
npm install undici
) 才能使用自定义
Agent

import { Agent } from 'undici';

await fetch('https://localhost:8888', {
  dispatcher: new Agent({
    connect: {
      rejectUnauthorized: false,
    },
  }),
});

3
投票

诀窍是使用

setGlobalDispatcher
getGlobalDispatcher
可以用来抓取原始的以便以后恢复)。

import {
  fetch,
  setGlobalDispatcher,
  Agent,
} from 'undici'

setGlobalDispatcher(new Agent({
  connect: {
    rejectUnauthorized: false
  }
}))

fetch('https://localhost:8888').then(...)

0
投票

您还可以使用ProxyAgent类。 ProxyAgent类有一个options.requestTls和options.proxyTls,文档中没有描述。为了使用rejectUnauthorized: false选项,只需像下面这样的代码:

import { ProxyAgent, request } from 'undici'

const proxyAgent = new ProxyAgent('my.proxy.server',{
    requestTls: {  // this is the key point
         rejectUnauthorized: false,
    }
})

const {  statusCode,  body } = await request('http://localhost:3000/foo', { dispatcher: proxyAgent })
for await (const data of body) {
  console.log('data', data.toString('utf8'))
}

另请检查测试用例 通过 HTTP 代理到 HTTPS 端点 和代理代理 源代码。这是 固定pr


0
投票

建议使用

rejectUnauthorized: false
的答案的问题在于,这会使请求不安全。

我建议您从您尝试访问的服务器/站点获取 PEM base64 证书,并在提出请求时通过代理将其包含在内:

const { Agent } = require('undici');

const PEM_CERTS = `{base64 certificate for https://localhost:8888}`;

/* 
    The certificate content should look like:
    -----BEGIN CERTIFICATE-----
    base64string
    -----END CERTIFICATE-----
*/

fetch('https://localhost:8888', {
    headers: {
        accept: 'application/json'
    },
    dispatcher: new Agent({
        connect: {
            ca: PEM_CERTS
        }
    })
}).then(response => {
    return response.text();
}).then(text => {
    console.log(text);
});

您可以通过浏览器访问 https://localhost:8888 来获取 Base64 证书,单击 URL 旁边的“安全”/锁定图标,然后按照浏览器的步骤将证书下载为 CRT 或 PEM。以纯文本形式打开以检索 Base64 内容。

或者通过命令行导出它,但您必须自己将其从 CER 转换为 base64 格式。

或者,您也可以在您的计算机上安装证书,您可能完全不必担心这一点。

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