我在将一些自签名 SSL 证书与 Mongoose 结合使用时遇到问题。让我挂断电话的是,我可以使用普通的 Mongo Node 客户端连接到数据库服务器,但是当我尝试使用与 Mongoose.createConnection 完全相同的配置进行连接时,我收到一条错误消息,内容为“[conn1 ] 当我检查 Mongod 日志时,没有 peer 提供的 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 docs ,这看起来是正确的连接方式,而且更奇怪的是,将服务器选项传递给 Mongoose.connect 似乎也能正常工作。
谢谢!
最佳答案
我有同样的问题,但我发现这是因为我在同一个 .pem
文件中 cat
了 key 和证书(如建议的mongodb 文档)。
但它很容易修复,只需在 sslCert:
和 sslKey:
下指定相同的文件,如下所示:
const options = {
server: {
ssl: true,
sslValidate: true,
sslCA: ca,
sslCert: cert,
sslKey: cert
}
}
在我的例子中,没有必要指定 authMechanism
和 authSource
。
关于node.js - Mongoose 不向 MongoDB 服务器发送 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43682558/