Tengo problemas con el uso de algunos certificados SSL autofirmados con Mongoose. Lo que me preocupa es que puedo conectarme al servidor de la base de datos sin problemas con el cliente Mongo Node normal, pero cuando pruebo la conexión usando exactamente la misma configuración con Mongoose.createConnection, aparece un mensaje de error que dice '[conn1 ] ningún certificado SSL proporcionado por peer' cuando verifico los registros de Mongod.
Este es el código que uso para conectarme con MongoClient.connect (funciona):
var MongoClient = require('mongodb').MongoClient var fs = require('fs') // Read the certificates const ca = [fs.readFileSync(process.env.caPath)]; const cert = fs.readFileSync(process.env.certPath); let urlPath = ["mongodb://", username, ":", password, "@", dburl, ":", port, "/collection?&ssl=true"] let url = urlPath.join('') // Connect validating the returned certificates from the server const options = { server: { ssl: true, sslValidate: true, sslCA: ca, sslCert: cert } } MongoClient.connect(url, options, function(err, db) { do stuff })Y este es el código que usa Mongoose.createConnection (no funciona):
const mongoose = require('mongoose'); const fs = require('fs') let urlPath = ["mongodb://", username, ":", password "@", dburl, ":", port, "/collection?&ssl=true"] let url = urlPath.join('') var ca = [fs.readFileSync(process.env.caPath, 'utf8')]; var cert = fs.readFileSync(process.env.certPath, 'utf8'); const options = { server: { ssl: true, sslValidate: true, sslCA: ca, sslCert: cert } } const connection = mongoose.createConnection(url, options)De acuerdo con los documentos de Mongoose , esta parece ser la forma correcta de conectarse, y para agregar a la rareza, pasar las opciones del servidor a Mongoose.connect también parece funcionar.
¡Gracias!
Tuve el mismo problema, pero descubrí que era porque había .pem cat como se sugiere en los documentos de mongodb).
Pero se soluciona fácilmente, solo especifique el mismo archivo en sslCert: y sslKey: así:
const options = { server: { ssl: true, sslValidate: true, sslCA: ca, sslCert: cert, sslKey: cert } } En mi caso, no fue necesario especificar ni authMechanism ni authSource .
Debe configurar algunas opciones de autenticación adicionales ( authMechanism y authSource ) en mongoose.connect() para especificar el certificado SSL. Ver: https://docs.mongodb.com/manual/reference/connection-string/#authentication-options
Estos se pueden especificar como opciones para mangosta así: options.auth = { authMechanism: 'MONGODB-X509', authSource: '$external' }
luego conéctese con esas opciones:
this.mongoose.connect(uri, options, (err) => { ...