无法使用带有 X509 用户的 mongoose 连接到 Mongo DB

Posted

技术标签:

【中文标题】无法使用带有 X509 用户的 mongoose 连接到 Mongo DB【英文标题】:Unable to connect to Mongo DB using mongoose with X509 user 【发布时间】:2019-01-03 00:26:15 【问题描述】:

我在我的项目中使用 nodeJS 并使用 mongoose 模块连接到 mongo db。使用用户名/密码方法连接工作正常。但是,当更改为 X509 身份验证时,我无法连接到数据库。

连接数据库时抛出错误 - "err":"name":"MongoError","message":"auth failed","ok":0,"errmsg":"auth failed","code":18

node version - v8.11.3
npm version  - 5.6.0
Mongo Db version - 3.4.14
mongoose version in package json - "^4.8.7" 

下面的代码sn-p,

var mongoose = require("mongoose");
mongoose.Promise = global.Promise
var connection = null;
var dbString = "mongodb://host1:10901,host2:1902/dbname?replicaSet=replset&readPreference=secondaryPreferred";
var fs = require('fs')

connection = mongoose.createConnection(dbString, 
    user: encodeURIComponent("C=US,ST=California,O=Company Inc.,OU=management:group.123456,CN=dbname-role-user-repl.mydomain.com"),
    auth:  authMechanism: "MONGODB-X509", authSource: '$external' ,
    server: 
        ssl: true,
        sslValidate: true,
        sslCA: fs.readFileSync(path to CA file),
        sslCert: fs.readFileSync(path to cert file),
        sslKey: fs.readFileSync(path to kep file),
        sslPass: "password"
    
);

connection.once("open", function () 
    console.log("App is connected to  DB -- " + dbString);
);
connection.once("close", function () 
    console.log("App disconnected from  DB -- " + dbString);
);
connection.on("error", function (err) 
    console.error("App failed to connect to  DB -- " + dbString, err);
);

module.exports = 
    connection: connection,
    mongoose: mongoose

有没有其他人遇到过类似的问题?

【问题讨论】:

【参考方案1】:

如果它对其他人有任何帮助,我找到了解决方法,下面是它的内容。

将猫鼬更新到版本 5.2.5 并删除用户字符串上的编码(即 encodeURIComponent)解决了这个问题。

【讨论】:

以上是关于无法使用带有 X509 用户的 mongoose 连接到 Mongo DB的主要内容,如果未能解决你的问题,请参考以下文章

使用 node.js 验证带有 CA 证书的 X509 证书

带有 cer 文件的 X509Certificate2 ctor

带有 X509 证书 + 智能卡的 Web 签名

无法将带有点的键(键路径)添加到具有以下类型的 Mongoose 字段:Schema.Types.Mixed

无法使用 $pull (Mongoose) 为用户模型删除数组中的对象

如何使用 React 前端从 Mongoose 显示带有 <img> 的图像