[英]Can't establish SSL connection to MongoDB from NodeJS program
我正在尝试使用配置了 SSL 连接的 Mongoose 从 NodeJS 程序连接一个 mongod 实例,但我在 mongod 控制台上收到以下错误:“从客户端接收请求时出错:SSLHandshakeFailed:服务器配置为仅允许 SSL 连接。 ”
mongod 实例启动如下:
mongod --sslMode requireSSL --sslPEMKeyFile C:/Users/MyUsername/Path/mongodb.pem
我尝试使用 MongoClient 而不是 mongoose 但没有发生任何新的事情。 这是我的一段代码:
if(envConfig.config.db.tls === true){
let certFile = [fs.readFileSync("C:/PATH/TO/Key/mongoDB.pem")];
mongoose.connect("mongodb://localhost:27017/DB_NAME?ssl=true",{
server:{
sslValidate: true,
sslCA: certFile
}
});
}else{
mongoose.connect(`mongodb://${dbUrl}`,options);
}
这与 PEM 文件无关,因为当我在编写时启动 mongod 并使用来自代码的相同 PEM 文件使用 SSL 连接与 MongoDB Compass - 它可以工作。
MongoDB 版本:3.6.0
猫鼬版本:4.13.6
如果有人能指导我我做错了什么,我很高兴。
我认为您应该参考问题Mongoose SSL, connection not accepting
您应该指定{server: {ssl: true}
参数,我认为您的问题将得到解决
如果您使用私钥和证书启动 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);
}
有关通过 Node JS 进行 SSL 连接的更多详细说明,您可以访问此处
解决了! 问题是使用快速会话中间件并尝试使用不正确的连接字符串连接数据库,这是导致问题的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.