[英]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
)上设置一些其他身份验证选项( authMechanism
和authSource
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.