因此我花了一些时间来设置一个带有SSL和授权的repl集。但是,我最终设置并工作,并可以通过命令行连接,提供适当的参数。我正在尝试使用mongoose做同样的事情,但是我在mongodb日志中遇到错误,如下所示:AssertionException handling request, closing client connection: 17189 The server is configured to only allow SSL connections
即使我指定了所有ssl选项。
我的代码如下:
var m = require('mongoose');
var key = fs.readFileSync('/home/node/mongodb/mongodb.pem');
var ca = [fs.readFileSync('/home/node/mongodb/ca.pem')];
var o = {
server: {
sslValidate:true,
sslCA: ca,
sslKey: key,
sslCert:key
},
user: '****',
pass: '****'
};
m.connect('mongodb://dbAddr/dbName', o)
我已尝试将sslValidate设置为false
,同样的问题。我尝试过没有CA,证书和/或密钥的多种组合。当我通过命令行连接时,它要求我提供CA和密钥+证书PEM文件。所以我认为猫鼬客户端也需要这些。我已经尝试了server
和replset
个键,但结果相同。我甚至指定了authSource(authDB),即使看起来这不是问题的一部分,这仍然会产生相同的结果。
我真的很困惑,特别是因为我通过mongo
命令完成同样的事情没有问题。
我的mongo shell命令如下:
mongo --host db1 --ssl --sslPEMKeyFile /etc/mongodb/mongodb.pem --sslCAFile /etc/mongodb/ca.pem -u *** -p *** --authenticationDatabase dbName
答案 0 :(得分:2)
mongoDB node driver documentation中未说明,您还必须提供选项{server: {ssl: true}
才能通过SSL进行连接。如果不这样做,则忽略其他选项。
但是,如果你深入了解github上的mongoose问题跟踪器,你会找到this,它会完全推荐。