Lambda 运行时节点 18 和 OpenSSL 问题

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

我正在致力于将一些 lambda 运行时从节点 16 迁移到节点 18,但遇到了证书问题。我们创建一个 https.Agent() 将配置传递给 HTTP 请求,pfx 属性是 p12 证书的缓冲区。

const options = {
    pfx: certificate,
    passphrase: 'test',
    rejectUnauthorized: true,
  };

  const sslConfiguredAgent = new https.Agent(options);

我发现该问题与核心 Node 库中的 OpenSSL 有关,因此为了解决它,我尝试了以下方法:

  • 将节点变量 NODE_OPTIONS=--openssl-legacy-provider 声明为 lambda 的环境变量
    • 这给了我错误:在 lambda 的 Init Fase 中“无法加载旧提供程序”
  • 创建一个包装器脚本来设置 env 变量,然后生成 lambda 执行
    • 当他们尝试初始化预配置的并发时,这会导致 FUNCTION_ERROR_INIT_FAILURE。

从 AWS_LAMBDA_EXEC_WRAPPER 访问包装器脚本:/opt/data/wrapper

#!/bin/bash

args=("$@")

export NODE_OPTIONS="--openssl-legacy-provider"

exec "${args[@]}"

也许错误可能与脚本有关,但我是根据我找到的有关它的信息构建的。

  1. Lambda 上的 Node 18 运行时是否存在不允许使用 OpenSSL 旧提供程序的限制?
  2. 你们看到包装脚本有任何增强功能以使其正常工作吗?
  3. 是否有另一种方法可以解决从 https.Agent() 发送 pfx 属性以避免错误:configSecureContext 不受支持(节点:internal/tls/secure-context:278:15)?
javascript node.js aws-lambda openssl devops
1个回答
0
投票

我通过更新此 git 问题 link 之后的 pfx 文件上的密码找到了解决此问题的方法。完成此操作后,节点 18 就能够通过 HTTP 请求发送它,而无需使用标志

--openssl-legacy-provider

用于更新密码的命令:

openssl pkcs12 -in currentFile.p12 -nodes -legacy -out decryptedPfxFile.tmp
openssl pkcs12 -in decryptedPfxFile.tmp -export -out newFile.p12

这些命令将询问当前文件使用的密码。

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