nodejs 环境变量“NODE_EXTRA_CA_CERTS”

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

我正在开发一个基于 Ionic + Angular + Cordova + Node js 的移动应用程序。

应用程序通过window.XMLHttpRequest访问https服务器:

module.exports = function request (method, url, body, headers) {
  return new Promise(function (resolve, reject) {
    var xhr = new window.XMLHttpRequest()

    xhr.open(method, url)

    xhr.onload = function () {
      return resolve({
        status: xhr.status,
        body: xhr.responseText
      })
    }

    xhr.onerror = xhr.onabort = function () {
      return reject(new Error(xhr.statusText || 'XHR aborted: ' + url))
    }

    Object.keys(headers).forEach(function (header) {
      xhr.setRequestHeader(header, headers[header])
    })

    xhr.send(body)
  })
}

要执行此功能,需要将适当的根CA插入节点环境。 由于我不控制发出 https 请求的代码,因此我更喜欢基于策略/配置的方法,该方法可以在节点 js 中启用额外的根 CA。

我四处搜索,发现节点实际上提供了一个环境变量“NODE_EXTRA_CA_CERTS”,这似乎满足了我的目的。

但是我找不到任何关于如何使用这个变量的例子。

我的实现是安装npm包dotenv-webpack

添加了一个 .env 文件,其中包含配置“NODE_EXTRA_CA_CERTS=./assets/cert/cacert.pem”(相应根 CA 的文件路径)。

我可以验证变量 NODE_EXTRA_CA_CERTS 是否已成功设置。但似乎没有任何效果。由于安全原因,对服务器的访问被拒绝。

所以我的问题:任何人都可以提供一个如何使用变量“NODE_EXTRA_CA_CERTS”的示例吗?

谢谢

node.js angular ssl ionic2 tls1.2
2个回答
6
投票

因此您正在讨论的 env 变量是在“系统”级别提供的,因此您不需要在 env 文件中本地定义该变量。

如果你想访问该变量,你应该在 dotenv-webpack 上使用以下配置:

Dotenv({
  systemvars: true
})

这将允许您访问系统级变量。要访问变量,您将使用变量:

process.env.NODE_EXTRA_CA_CERTS

  • process
    存储有关节点进程运行的信息。
  • env
    存储所有环境变量(由
    dotenv-webpack
    填充)。

您可以在此处阅读有关

process
全局变量的更多信息:https://nodejs.org/api/process.html


0
投票

NODE_EXTRA_CA_CERTS
必须在Node启动时在环境中设置。当
Dotenv
加载您的环境文件时,更改它已经太晚了。

来自文档

NODE_EXTRA_CA_CERTS
环境变量仅在 Node.js 进程首次启动时读取。使用
process.env.NODE_EXTRA_CA_CERTS
在运行时更改值对当前进程没有影响。

有关可能更改该行为的讨论,请参阅 https://github.com/nodejs/node/issues/51426

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