繁体   English   中英

猫鼬没有向MongoDB服务器发送SSL证书

[英]Mongoose not sending SSL cert to MongoDB server

我在Mongoose上使用一些自签名SSL证书时遇到问题。 让我挂断的是,我可以使用普通的Mongo Node客户端很好地连接到数据库服务器,但是当我尝试使用与Mongoose.createConnection完全相同的配置进行连接时,出现一条错误消息,内容为'[conn1 ]当我检查Mongod日志时,没有对等方提供的SSL证书。

这是我用来连接MongoClient.connect的代码(有效):

var MongoClient = require('mongodb').MongoClient
var fs = require('fs')  

// Read the certificates
const ca = [fs.readFileSync(process.env.caPath)];
const cert = fs.readFileSync(process.env.certPath);
let urlPath = ["mongodb://", username, ":", password, "@", dburl, ":", port, "/collection?&ssl=true"]
let url = urlPath.join('')

// Connect validating the returned certificates from the server
const options = {
  server: {
    ssl: true,
    sslValidate: true,
    sslCA: ca,
    sslCert: cert
  }
}

MongoClient.connect(url, options, function(err, db) {
  do stuff
})

这是使用Mongoose.createConnection的代码(无效):

const mongoose = require('mongoose');
const fs = require('fs')

let urlPath = ["mongodb://", username, ":", password "@", dburl, ":", port, "/collection?&ssl=true"]
let url = urlPath.join('')

var ca = [fs.readFileSync(process.env.caPath, 'utf8')];
var cert = fs.readFileSync(process.env.certPath, 'utf8');

const options = {
  server: {
    ssl: true,
    sslValidate: true,
    sslCA: ca,
    sslCert: cert
  }
}
const connection = mongoose.createConnection(url, options)

根据Mongoose的文档 ,这似乎是正确的连接方式,并增加了怪异性,将服务器选项传递给Mongoose.connect似乎也可以。

谢谢!

我有同样的问题,但我发现,这是因为我cat “在同一个编密钥和证书一起.pem文件(如文档mongodb的建议)。

但这很容易修复,只需在sslCert:sslKey:下都指定相同的文件sslCert: ,如下所示:

const options = {
    server: {
        ssl: true,
        sslValidate: true,
        sslCA: ca,
        sslCert: cert,
        sslKey: cert
    }
}

在我的情况下,既不必指定authMechanism也不必指定authSource

您需要在authSource )上设置一些其他身份验证选项( authMechanismauthSource mongoose.connect()以指定SSL证书。 参见: https : //docs.mongodb.com/manual/reference/connection-string/#authentication-options

可以将这些指定为猫鼬的选项,如下所示: options.auth = { authMechanism: 'MONGODB-X509', authSource: '$external' }

然后使用以下选项进行连接:

this.mongoose.connect(uri, options, (err) => { ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM