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.
3 Réponses :
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
Essayé, mêmes résultats
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
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.
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