无法从NodeJS程序建立与MongoDB的SSL连接

时间:2019-01-24 16:45:19

标签: node.js mongodb ssl

我正在尝试使用配置了SSL连接的Mongoose从NodeJS程序连接Mongod实例,但是在mongod控制台上收到以下错误:“从客户端接收请求时出错:SSLHandshakeFailed:服务器配置为仅允许SSL连接。”

mongod实例启动如下:

awk

我尝试使用MongoClient代替mongoose,但没有任何新变化。 这是我的代码:

mongod --sslMode requireSSL --sslPEMKeyFile C:/Users/MyUsername/Path/mongodb.pem

与PEM文件无关,因为当我按照编写的方式启动mongod并使用与代码中相同的PEM文件与MongoDB Compass进行SSL连接时,它就起作用了。

MongoDB版本:3.6.0

猫鼬版本:4.13.6

很高兴有人能指导我我在做什么错

3 个答案:

答案 0 :(得分:1)

我认为您应该参考问题Mongoose SSL, connection not accepted

您应该指定{server: {ssl: true}参数,我认为您的问题将得到解决

答案 1 :(得分:0)

如果您使用私钥和证书启动MongoDB守护程序

mongod --sslMode requireSSL --sslPEMKeyFile C:/Users/MyUsername/Path/mongodb.pem --sslCAFile C:/Users/MyUsername/Path/mongodb.crt

您可以像这样从Node JS连接

if(envConfig.config.db.tls === true){
 let key = fs.readFileSync("C:/Users/MyUsername/Path/mongodb.pem");
 let crt = fs.readFileSync("C:/Users/MyUsername/Path/mongodb.crt");
 mongoose.connect("mongodb://localhost:27017/DB_NAME?ssl=true",{
     server:{
         "sslValidate" :true
         "sslKey": key,
         "sslCert": crt, // if you have one certificate you can use `sslCert` parameter
     }
 });
}else{
  mongoose.connect(`mongodb://${dbUrl}`,options);
}

可以通过here

更详细地解释通过Node JS进行SSL连接。

答案 2 :(得分:0)

解决了! 问题是使用Express-Session Middelware并尝试使用错误的连接字符串连接数据库,这就是导致问题的原因。