【发布时间】:2022-12-12 07:52:21
【问题描述】:
我正在尝试将 NodeJS 服务器连接到启用了 TLS 的 AWS documentDB 集群。 NodeJS 服务器托管在 EC2 实例上,并且与 documentDB 集群位于同一 VPC 上。但我收到以下错误:
{ MongoServerSelectionError: unable to get local issuer certificate
at Timeout.waitQueueMember.timer.setTimeout [as _onTimeout] (/home/ubuntu/server/node_modules/mongodb/lib/core/sdam/topology.js:438:30)
at ontimeout (timers.js:436:11)
at tryOnTimeout (timers.js:300:5)
at listOnTimeout (timers.js:263:5)
at Timer.processTimers (timers.js:223:10)
name: 'MongoServerSelectionError',
reason:
TopologyDescription {
type: 'ReplicaSetNoPrimary',
setName: null,
maxSetVersion: null,
maxElectionId: null,
servers:
Map {
'*******.cluster-****.us-east-1.docdb.amazonaws.com:27017' => [ServerDescription] },
stale: false,
compatible: true,
compatibilityError: null,
logicalSessionTimeoutMinutes: null,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
commonWireVersion: null } }
错误似乎与 TLS 证书有关。但是我在连接时传递了 rds-combined-ca-bundle.pem 的内容,如下面的代码所示:
uri = process.env.MONGODB_URI || process.env.Db_url;
options = {
user: "****",
pass: "****",
}
mongoose.set("useCreateIndex", true);
mongoose.connect(
uri,
{
useNewUrlParser: true,
useFindAndModify: false,
useUnifiedTopology: true,
sslCA: [fs.readFileSync("/home/ubuntu/rds-combined-ca-bundle.pem")],
},
err => {
if (err) {
console.log('Connection Error: ', err);
} else {
console.log(`Successfully Connected============`);
}
}
);
我尝试使用 EC2 实例上的 mongo shell 连接到 mongo 集群
mongo --ssl --host *******.cluster-****.us-east-1.docdb.amazonaws.com:27017 \
--sslCAFile rds-combined-ca-bundle.pem --username ***** --password *****
这是有效的。因此,与集群的连接很好,但猫鼬无法连接。
还有其他方法可以使用猫鼬连接到 documentDB 吗?
【问题讨论】:
标签: node.js mongodb ssl mongoose aws-documentdb