【问题标题】:How can I set TLS for Mongoose connection如何为 Mongoose 连接设置 TLS
【发布时间】:2021-05-02 05:25:12
【问题描述】:

我正在尝试将我的 mongo 数据库从 Compose 迁移到 IBM Cloud Databases for Mongo 及其文档 (https://www.compose.com/articles/exporting-databases-from-compose-for-mongodb-to-ibm-cloud/):“使用新的 Databases for MongoDB 部署,您将获得一个包含两个的副本集连接到您的数据库的端点。MongoDB 的数据库也使用 TLS 证书,因此您需要将 MongoDB 应用程序驱动程序配置为接受两个主机和一个 TLS 证书"

如何在 Mongoose 连接中设置 IBM Cloud 提供的 TLS 证书? 我试过的都没有用:(

如果我使用 IBM cli,我可以看到我的数据库,但我无法从我的 node.js 应用程序连接到它

var mongoose = require('mongoose');
mongoose.Promise = Promise;
var uri="mongodb://admin:passSftgdsdfvrrdfs@host1-1231243242.databases.appdomain.cloud:32605,host2-1231243242,host1-1231243242/testDatabaseName?authSource=admin&replicaSet=replset"
myDb.db = mongoose.createConnection(uri, {
  tls: true,
  tlsCAFile:`076baeec-1337-11e9-8c9b-ae5t6r3d1b17` (this is the name of the certificate and is placed in the root)
  // tlsCAFile: require('fs').readFileSync('041baeec-1272-11e9-8c9b-ae2e3a9c1b17') // I have also tried something like this

即使数据库在那里也绝对没有任何工作 请帮帮我

【问题讨论】:

    标签: mongodb mongoose ibm-cloud compose-db


    【解决方案1】:

    我也遇到了同样的问题 这对我有用

     mongoose.connect(‘mongodb+srv://username:password@host/db_name?authSource=admin&replicaSet=repliasetname&tls=true&tlsCAFile=/root/ca-certificate.crt’,{some config})
    

    【讨论】:

      【解决方案2】:

      尝试以下方法:

      
      var key = fs.readFileSync('/home/node/mongodb/mongodb.pem');
      var ca = [fs.readFileSync('/home/node/mongodb/ca.pem')];
      
      var o = {
          server: {
              ssl: true,
              sslValidate:true,
              sslCA: ca,
              sslKey: key,
              sslCert:key
          },
          user: '****',
          pass: '****'
      };
      
      m.connect('mongodb://dbAddr/dbName', o)```
      

      【讨论】:

        【解决方案3】:

        我是本地做的,需要先安装隧道

        $ ssh -i "IF YOU HAVE PEM.pem" -L <27017:YOUR_AMAZON_HOST:27017> <server_user_name@server_ip_OR_server_url> -N
        

        我设法实现它如下

        const CERTIFICATE_PATH = 'rds-combined-ca-bundle.pem'
        const certificateCA = CERTIFICATE_PATH && [fs.readFileSync(CERTIFICATE_PATH)];
            
        const sslOptions = certificateCA
          ? ({
              ssl: true,
              tlsAllowInvalidHostnames: true,
              sslCA: certificateCA,
              user: MONGODB_USER,
              pass: MONGODB_PASSWORD,
            } as ConnectionOptions)
          : {};
        
        const options: ConnectionOptions = {
          ...sslOptions,
        };
        
        export const connectMongoDb = async (): Promise<void> => {
          await mongoose.connect('mongodb://localhost:27017/test', options);
          console.log('? Successfully connected to the database');
        };
        

        你需要设置

        MONGODB_USER

        MONGODB_PASSWORD

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-04-28
          • 2021-07-27
          • 1970-01-01
          • 2020-08-13
          • 1970-01-01
          • 2021-04-16
          • 1970-01-01
          相关资源
          最近更新 更多