node.js - Mongoose 不向 MongoDB 服务器发送 SSL 证书

标签 node.js mongodb ssl mongoose self-signed

我在将一些自签名 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
    }
}

在我的例子中,没有必要指定 authMechanismauthSource

关于node.js - Mongoose 不向 MongoDB 服务器发送 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43682558/

相关文章:

javascript - 从对象数组动态创建嵌套的 json

node.js - Mongoose-如何引用嵌入文档元素?

php - 使用 HTTPS 时,您无权访问/在此服务器上

node.js - 覆盖 Mongoose 模型方法

node.js - 使用 pg-promise 插入多条记录

javascript - 了解strapi关系如何运作

java - 如何创建用于 Apache Tomcat 的 X509 自签名证书

c# - 从 https 页面链接

javascript - 使用归档器创建内存中的 .zip,然后将此文件发送到 Node 服务器上的 koa 客户端

javascript - 尝试使用 Node.js 和 mysql javascript 客户端连接到 MySQL 数据库