无法确定与 DocumentDB 的 Mongoose SSL 连接错误

Posted

技术标签:

【中文标题】无法确定与 DocumentDB 的 Mongoose SSL 连接错误【英文标题】:Unable to determine Mongoose SSL connection error to DocumentDB 【发布时间】:2020-04-21 13:38:09 【问题描述】:

我在 AWS Elastic Beanstalk (EB) 中有 2 个环境,运行一个使用 Mongoose 框架连接到 DocumentDB 的 Node.js 应用程序。其中一个环境莫名其妙地停止工作,而另一个环境工作正常。两者都是从使用 EB CLI 部署应用程序代码的 CI/CD 构建服务器部署的。

有问题的环境在nodejs.log中产生如下错误:

  name: 'MongooseTimeoutError',
  reason:
    Error: unable to get local issuer certificate
       at TLSSocket.onConnectSecure (_tls_wrap.js:1058:34)
       at TLSSocket.emit (events.js:198:13)
       at TLSSocket._finishInit (_tls_wrap.js:636:8)
     name: 'MongoNetworkError',
     [Symbol(mongoErrorContextSymbol)]:  ,
  [Symbol(mongoErrorContextSymbol)]:  

两者都使用相同的连接字符串,因为它们连接到同一个实例mongodb://*****:*****@docdb-2019-08-**-**-**-**.cluster-**********.us-east-2.docdb.amazonaws.com:27017/db_name?ssl=true&ssl_ca_certs=/etc/ssl/certs/rds-combined-ca-bundle.pem&replicaSet=rs0

证书 pem 文件与两者使用的文件相同,并通过 EB .ebextensions 脚本部署到实例。

我尝试过的事情:

连接到问题环境的 EC2 实例,安装 mongodb shell 并能够使用 Mongo 连接字符串中指定的证书成功连接到 DocumentDB 实例。 通过 Elastic Beanstalk Web 管理控制台重建 EB 环境。

目前有点卡住,没有想法。

【问题讨论】:

aws documentDB 太糟糕了 【参考方案1】:

Amazon 的 DocumentDB 官方文档中有一个示例代码可以正常工作并且不会触发此错误。

https://docs.aws.amazon.com/documentdb/latest/developerguide/connect_programmatically.html

这是 Node.JS 示例,为了清楚起见做了一些修改:

const  MongoClient  = require('mongodb');
const fs = require('fs');

const caContent = [fs.readFileSync("/path/to/rds-combined-ca-bundle.pem")];
const options =  
  sslValidate: true,
  sslCA: caContent,
  useNewUrlParser: true
;
const connUri = 'mongodb://user:pass@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/sample-database?ssl=true&replicaSet=rs0&readPreference=secondaryPreferred';

const client = new MongoClient(connUri, options);
const client = await MongoClient.connect();

【讨论】:

这对我有用。谢谢。【参考方案2】:

有同样的问题..不确定这是否会随着 cert 到 2019 的更改而中断..无论如何我必须通过更改代码来解决这个问题(将 sslCA 参数添加到下面的 Mongoose 连接方法)并删除来自连接字符串的 ssl 证书位置。

connect(uri, useNewUrlParser: true,
        useFindAndModify: false,
        sslCA: [fs.readFileSync("rds-combined-ca-bundle.pem")], (err: any)

【讨论】:

是的..这是一种方法;)..无论如何,我是AWS论坛响应中的同一用户。我想我也会在这里发布。

以上是关于无法确定与 DocumentDB 的 Mongoose SSL 连接错误的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 pySpark 从 Databricks 在 Cosmos DB/documentDB 中写入数据帧

无法使用microsoft.azure.documentdb.core更新Azure CosmosDB中的文档

在 DocumentDB 中处理每秒请求单位 (RUs/s) 峰值

DocumentDB OfferThroughput 是不是应该在代码中设置?

无法从我的ubuntu EC2计算机连接到AWS DocumentDB

无法使用 SSH 隧道将 MongoDB Compass 连接到 AWS DocumentDB