1
votes

Impossible d'établir une connexion SSL à MongoDB à partir du programme NodeJS

J'essaie de connecter une instance mongod à partir du programme NodeJS à l'aide de Mongoose configurée avec une connexion SSL mais j'obtiens l'erreur suivante sur la console mongod: "Erreur lors de la réception de la demande du client: SSLHandshakeFailed: Le serveur est configuré pour autoriser uniquement Connexions SSL. "

L'instance mongod est lancée comme suit:

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

J'ai essayé d'utiliser MongoClient au lieu de mangouste mais rien de nouveau ne s'est produit. Voici mon morceau de code:

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);
 }

Ce n'est pas quelque chose à propos du fichier PEM parce que lorsque je lance le mongod comme je l'ai écrit et que j'utilise une connexion SSL avec MongoDB Compass en utilisant le même PEM fichier du code - cela fonctionne.

Version MongoDB: 3.6.0

Version Mongoose: 4.13.6

Heureux si quelqu'un me guide ce que je suis faire mal.


2 commentaires

Pouvez-vous vous connecter à mongo via une ligne de commande ou une interface graphique comme Rabo3T? Parce que vous avez spécifié la clé privée d'un certificat mais pas le certificat réel. Je suppose que vous devez spécifier les deux --sslPEMKeyFile et --sslCAFile


Oui, je peux me connecter via Mongo Compass comme je l'ai déjà mentionné. Également essayé d'utiliser le "--sslCAFile C: /PATH/TO/CERTIFICATE.crt" et toujours - les mêmes résultats


3 Réponses :


1
votes

Je pense que vous devriez vous référer à la question Mongoose SSL, connexion non acceptée

Vous devez spécifier le paramètre {server: {ssl: true} et je pense que votre problème sera résolu


1 commentaires

Essayé, mêmes résultats



0
votes

Si vous lancez le démon MongoDB avec une clé privée et un certificat

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);
}

Vous pouvez vous connecter à partir de Node JS comme

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

Explication plus détaillée de Connexion SSL via Node JS, vous pouvez aller ici


0 commentaires

0
votes

Résolu! Le problème était d'utiliser le middleware de session express et d'essayer de connecter la base de données avec une chaîne de connexion incorrecte, c'est ce qui a causé le problème.


0 commentaires