gpt4 book ai didi

node.js - AWS Lambda - 错误 : unable to get local issuer certificate

转载 作者:行者123 更新时间:2023-12-04 15:26:39 25 4
gpt4 key购买 nike

我正在尝试使用 NodeJS lambda 连接到 amazon postgreSQL RDS。

lambda 与 RDS 实例位于同一 VPC 中,据我所知,安全组已设置为授予 lambda 对 RDS 的访问权限。 lambda 通过 API 网关调用,我使用 knex js 作为查询构建器。当 lambda 尝试连接到数据库时,它会抛出“无法获取本地颁发者证书”错误,但连接参数符合我的预期。

我知道这种连接是可行的,因为我已经在不同的环境中实现了它,但没有收到证书问题。我比较了这两种环境,但找不到任何直接的区别。

连接代码如下所示:

import AWS from 'aws-sdk';
import { types } from 'pg';
import { Moment } from 'moment';
import knex from 'knex';

const TIMESTAMP_OID = 1114;
// Example value string: "2018-10-04 12:30:21.199"
types.setTypeParser(TIMESTAMP_OID, (value) => value && new Date(`${value}+00`));

export default class Database {
/**
* Gets the connection information through AWS Secrets Manager
*/
static getConnection = async () => {
const client = new AWS.SecretsManager({
region: '<region>',
});

if (process.env.databaseSecret == null) {
throw 'Database secret not defined';
}

const response = await client
.getSecretValue({ SecretId: process.env.databaseSecret })
.promise();

if (response.SecretString == undefined) {
throw 'Cannot find secret string';
}

return JSON.parse(response.SecretString);
};

static knexConnection = knex({
client: 'postgres',
connection: async () => {
const secret = await Database.getConnection();

return {
host: secret.host,
port: secret.port,
user: secret.username,
password: secret.password,
database: secret.dbname,
ssl: true,
};
},
});
}

任何关于如何解决这个问题甚至从哪里开始寻找的指导都将不胜感激。

最佳答案

首先,绕过 ssl 验证不是一个好主意,这样做会使您容易受到各种攻击并跳过 TLS 握手中的关键步骤。

您可以做的是以编程方式从 Amazon 下载 ca 证书链包,并将其与处理程序一起放在 lambda 的根目录中。

wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem -P path/to/handler

注意:您可以在 buildspec.yaml 或打包上传到 aws 的 zip 文件的脚本中执行此操作

然后在代码 postgres 客户端配置中将 ssl 配置选项设置为 pem 文件的内容,如下所示:

let pgClient = new postgres.Client({
user: 'postgres',
host: 'rds-cluster.cluster-abc.us-west-2.rds.amazonaws.com',
database: 'mydatabase',
password: 'postgres',
port: 5432,
ssl: {
ca: fs.readFileSync(path.resolve('rds-combined-ca-bundle.pem'), "utf-8")
}
})

关于node.js - AWS Lambda - 错误 : unable to get local issuer certificate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62116314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com