Docs Menu
Docs Home
/ /

Habilitar TLS en una conexión

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

Para configurar su conexión para usar TLS, habilite la opción TLS y proporcione sus certificados para su validación.

Tip

Para obtener más información sobre TLS, consulte la entrada de Wikipedia sobre Seguridad de la capa de transporte.

Puede habilitar TLS en una conexión a su instancia de MongoDB de las siguientes maneras:

  • Configuración de la tls opción a true en su objeto MongoClientOptions

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

Una instancia MongoClient puede conectarse con TLS si configura tls en true en su objeto MongoClientOptions:

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

Una instancia 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 usa un registro SRV de DNS al conectarse a MongoDB especificando la modificación +srv en su cadena de conexión, activará TLS en su conexión de forma predeterminada. Para desactivarlo, configure el valor del parámetro tls o ssl en false en su cadena de conexión o en el objeto MongoClientOptions.

Para obtener más información sobre el comportamiento de la conexión cuando utiliza una lista de semillas DNS, consulte la sección Formato de conexión SRV en el manual del servidor.

Nota

Solución alternativa para el error "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 su aplicación sea insegura y potencialmente vulnerable a certificados vencidos y a procesos externos que se hacen pasar por instancias de cliente válidas.

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

Para iniciar correctamente una solicitud TLS, una aplicación debe demostrar su identidad mediante certificados criptográficos. Para conectarse a MongoDB con TLS, sus 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 de 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 el objeto MongoClientOptions para que el servidor pueda validarlos antes de que el cliente se conecte. Puede referenciarlos de las siguientes maneras:

  • Crear un SecureContext objeto para almacenar certificados (recomendado)

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

  • Crear Buffer objetos para almacenar certificados

Le recomendamos que utilice la opción secureContext para configurar su conexión TLS. Los objetos SecureContext son nativos de Node.js y le permiten mantener todas sus opciones TLS en un solo 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 createSecureContext() método y el tls paquete, consulte la documentación de la API TLS de Node.js.

Para obtener un ejemplo ejecutable que utiliza un SecureContext objeto, consulte 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 certificado 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

Su configuración de TLS podría requerir que presente una lista de revocación de certificados (CRL) al conectarse a MongoDB. A partir de la versión 6.0 del controlador, puede pasar la ruta de su archivo CRL a la opción tlsCRLFile en su cadena de conexión o en su 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 sus archivos de certificado y pasar los objetos Buffer resultantes como opciones en su 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 incluye opciones TLS. El ejemplo se conecta a MongoDB y ejecuta una consulta de búsqueda:

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