Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Habilitar TLS en una Conexión

En esta guía, puedes aprender cómo conectarte a instancias de MongoDB con el protocolo de seguridad TLS.

Para configurar tu conexión para usar TLS, habilita la opción TLS y proporciona tus certificados para la validación.

Tip

Para aprender más sobre TLS, consulte la entrada de Wikipedia sobre Seguridad de la capa de transporte.

Puedes habilitar TLS en una conexión a tu instancia de MongoDB de las siguientes maneras:

  • Configurando el tls opción a true en su objeto MongoClientOptions

  • Establecer la opción tls en true en tu cadena de conexión

Una instancia de MongoClient puede conectarse con TLS si estableces tls en true en tu objeto MongoClientOptions:

const client = new MongoClient(uri, { tls: true });

Una instancia de MongoClient puede conectarse con TLS si configura la opción tls en true en su cadena de conexión:

const uri = "mongodb://<hostname>:<port>?tls=true";
const client = new MongoClient(uri, myClientSettings);

Nota

Si usas un registro DNS SRV al conectarte a MongoDB especificando la modificación +srv en tu cadena de conexión, activas TLS en tu conexión por defecto. Para desactivarlo, establece el valor del parámetro tls o ssl en false en tu cadena de conexión u objeto MongoClientOptions.

Para obtener más información sobre el comportamiento de conexión cuando se utiliza una lista de nodos iniciales DNS, consulte la sección SRV Connection Format en el manual del Servidor.

Nota

Solución para un error de "renegociación heredada insegura deshabilitada"

El controlador Node.js depende de OpenSSL por defecto. Los proxies SSL obsoletos pueden causar un error unsafe legacy renegotiation disabled en entornos que utilizan OpenSSL 3.0 o posterior. Puede resolver este error configurando la opción SSL_OP_LEGACY_SERVER_CONNECT, como se muestra en el siguiente ejemplo:

import { MongoClient } from 'mongodb';
import crypto from 'crypto';
const client = new MongoClient("mongodb+srv://...", {
secureContext: {
secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT
}
});

Además de la tls opción de cliente, el controlador ofrece más opciones para configurar TLS en su conexión. Para realizar pruebas, puede configurar tlsAllowInvalidHostnames tlsAllowInvalidCertificateslas tlsInsecure opciones de cliente, y.

Configurar la opción tlsAllowInvalidHostnames en true deshabilita la verificación del nombre de host, y configurar la opción tlsAllowInvalidCertificates en true deshabilita la validación del certificado. Configurar la opción tlsInsecure en true deshabilita tanto la validación del certificado como la del nombre de host.

Advertencia

Especificar cualquiera de estas opciones en un entorno de producción hace que tu aplicación sea insegura y potencialmente vulnerable a certificados caducados y a procesos externos que se hagan pasar por instancias de cliente válidas.

Para obtener una lista completa de las opciones del cliente, consulta Especificar opciones de conexión.

Para iniciar correctamente una solicitud TLS, una aplicación debe demostrar su identidad haciendo referencia a certificados criptográficos. Para conectarte a MongoDB con TLS, tus certificados deben almacenarse como archivos PEM.

Importante

Para el uso en producción, recomendamos que tu implementación de MongoDB use certificados válidos generados y firmados por la misma autoridad certificadora. Para pruebas, puedes utilizar certificados autofirmados.

La siguiente lista describe los componentes necesarios para establecer una conexión con TLS:

Componente TLS
Descripción

Autoridad de certificación (CA)

Una o más autoridades de certificación en las que confiar al realizar una conexión TLS.

Certificado de cliente

Un certificado digital y una clave que permiten al servidor verificar la identidad de su aplicación para establecer una conexión de red cifrada.

Clave del certificado

El archivo de clave privada del certificado de cliente. Esta clave a menudo se incluye dentro del propio archivo de certificado.

Frase de contraseña

La contraseña para descifrar la clave privada del cliente si está cifrada.

Tip

Para obtener más información sobre el formato PEM, consulte la entrada de Wikipedia sobre correo con privacidad mejorada.

Debe referenciar sus certificados en su objeto MongoClientOptions para que el servidor pueda validarlos antes de que el cliente se conecte. Puedes hacer referencia a tus certificados de las siguientes maneras:

  • Crea un objeto SecureContext para almacenar certificados (Recomendado)

  • Proporcione cadenas de ruta de archivo que apunten a sus certificados

  • Crear Buffer objetos para almacenar certificados

Recomendamos que utilice la opción secureContext para configurar la conexión TLS. Los objetos SecureContext son nativos de Node.js y permiten mantener todas las opciones TLS en un único objeto reutilizable.

Para crear un objeto SecureContext, importe el método createSecureContext() del módulo tls. A continuación, llame al método createSecureContext() y pase el contenido de sus certificados en el parámetro options. Este método devuelve un objeto SecureContext que puede usar en su objeto MongoClientOptions.

El siguiente código muestra cómo crear un objeto SecureContext y pasarlo a su cliente:

// Create a SecureContext object
const secureContext = tls.createSecureContext({
ca: fs.readFileSync(`<path to CA certificate>`),
cert: fs.readFileSync(`<path to public client certificate>`),
key: fs.readFileSync(`<path to private client key>`),
});
// Pass the SecureContext as a client option
const client = new MongoClient(uri, { tls: true, secureContext });

Para obtener más información sobre el método createSecureContext() y el paquete tls, consulta la Documentación de la API TLS de Node.js.

Para un ejemplo ejecutable que utilice un objeto SecureContext, consulta el Ejemplo de SecureContext.

Puede incluir las rutas de archivo de sus certificados como opciones de cliente para recuperarlos al conectarse con TLS. El controlador lee estos archivos al llamar al método connect() en su instancia MongoClient.

El siguiente código muestra cómo proporcionar rutas de archivos de certificados como opciones en su MongoClient:

// Pass filepaths as client options
const client = new MongoClient(uri, {
tls: true,
tlsCAFile: `<path to CA certificate>`,
tlsCertificateKeyFile: `<path to private client key>`,
});

Nota

Archivos CRL

Tu configuración TLS podría requerir que presentes una lista de revocación de certificados (CRL) al conectarte a MongoDB. A partir de la versión 6.0 del driver, puedes proporcionar la ruta de archivo de tu archivo CRL en la opción tlsCRLFile de tu cadena de conexión o en tu instancia MongoClientOptions.

Puede pasar el contenido de sus archivos de certificado como objetos Buffer en las opciones de su cliente para conectarse con TLS.

El siguiente código muestra cómo leer el contenido de los archivos del certificado y pasar los objetos resultantes de Buffer como opciones en tu MongoClient:

// Read file contents
const ca = fs.readFileSync(`<path to CA certificate>`);
const cert = fs.readFileSync(`<path to public client certificate>`);
const key = fs.readFileSync(`<path to private client key>`);
// Pass Buffers as client options
const client = new MongoClient(uri, { tls: true, ca, cert, key });

Este ejemplo muestra cómo crear un objeto SecureContext y una instancia MongoClient que incluya opciones de TLS. El ejemplo se conecta a MongoDB y ejecuta una query:

import { MongoClient } from "mongodb";
import * as fs from "fs";
import * as tls from "tls";
// Replace the uri string with your connection string.
const uri = "<connection uri>";
// Replace the filepaths with your certificate filepaths.
const secureContext = tls.createSecureContext({
ca: fs.readFileSync(`<path to CA certificate>`),
cert: fs.readFileSync(`<path to public client certificate>`),
key: fs.readFileSync(`<path to private client key>`),
});
// Create a client with the secureContext option
const client = new MongoClient(uri, { tls: true, secureContext });
async function run() {
try {
const db = client.db("myDB");
const myColl = db.collection("myColl");
const doc = await myColl.findOne({});
console.log(doc);
} finally {
await client.close();
}
}
run().catch(console.dir);

Para obtener más información sobre cómo habilitar TLS en una conexión, consulte la siguiente documentación del manual del servidor:

Volver

Encriptación en uso

En esta página