Docs Menu
Docs Home
/ /
/ / /

Desarrollo local de MongoDB con TLS

MongoDB Atlas proporciona certificados TLS válidos para entornos de desarrollo, pero es posible que necesite implementar una implementación local con configuraciones de seguridad personalizadas. Esta guía proporciona instrucciones para configurar el cifrado TLS para una implementación local de MongoDB, lo que le permite crear un entorno de pruebas seguro similar a una infraestructura de producción.

Usando cualquiera de los dos La edición comunitaria o Enterprise de MongoDB local con cifrado TLS proporciona un entorno realista para el desarrollo, la prueba y la validación de los comportamientos de seguridad de su aplicación antes de la implementación.

En entornos de producción, los servidores MongoDB utilizan certificados firmados por autoridades de certificación (CA) de confianza. Para el desarrollo local, puede utilizar cualquiera de las siguientes opciones:

  • Certificados CA comerciales o públicos: si ha registrado un nombre de dominio, puede obtener un certificado de una autoridad de certificación reconocida.

  • Certificados de CA empresariales: si su organización mantiene una autoridad de certificación privada como EJBCA o TinyCert, puede solicitar certificados a través de su departamento de TI.

  • Certificados CA gratuitos: si tienes un dominio registrado, servicios como Let's Encrypt proporcionan certificados gratuitos firmados por la autoridad de certificación.

  • Certificados autofirmados: para entornos de desarrollo locales aislados, las cadenas de certificados autofirmados proporcionan una solución práctica cuando no hay otras opciones disponibles.

Puede implementar una cadena de certificados autofirmados para implementaciones locales de MongoDB siguiendo estos pasos. Al crear su propia autoridad de certificación y certificados de servidor, puede simular conexiones cifradas con TLS sin necesidad de servicios externos.

Importante

Utilice cadenas de certificados autofirmados únicamente en entornos de desarrollo aislados. Estas cadenas no contienen los mecanismos de verificación de confianza de los certificados correctamente emitidos y pueden presentar vulnerabilidades de seguridad. Nunca utilice certificados autofirmados en producción ni al trabajar con datos confidenciales.

En las comunicaciones seguras, los certificados de servidor prueban la identidad del servidor a los clientes que se conectan, lo que evita ataques del tipo "man-in-the-middle" y facilita el intercambio seguro de claves para comunicaciones cifradas.

En un protocolo de enlace TLS típico, el cliente verifica el certificado del servidor comprobando si:

  • El certificado está firmado por una autoridad de certificación de confianza.

  • El certificado es válido, no está vencido ni revocado.

  • El nombre del servidor en el certificado coincide con el servidor al que se está conectando

El cliente acepta certificados de CA raíz e intermedia solo si están presentes en su almacén de confianza local. En el caso de certificados correctamente emitidos, solo la autoridad emisora ​​puede acceder a la clave privada del certificado raíz, nunca el servidor.

Para su configuración local de MongoDB TLS con certificados autofirmados, debe crear y administrar varios archivos de certificado que cumplen diferentes propósitos en el protocolo de enlace TLS.

Requisitos del servidor:

  • Un certificado de autoridad de certificación (CA) autofirmado, que actúa como su propia raíz de confianza.

  • La clave privada del certificado CA autofirmado, que se utiliza para firmar certificados de servidor.

  • Un certificado de servidor firmado por su CA autofirmada, que identifica su servidor MongoDB.

  • La clave privada del certificado del servidor, que se utiliza para el cifrado TLS.

Requisitos del cliente:

  • El certificado CA raíz autofirmado, que es necesario para verificar el certificado del servidor.

  • Certificados de cliente y sus claves privadas, que son opcionales y se utilizan para TLS mutuo.

Al configurar MongoDB, especifique las rutas a estos archivos de certificado en las configuraciones de su servidor y cliente para establecer conexiones TLS seguras.

Importante

En un entorno de producción con certificados de una CA reconocida, no se tiene acceso a la clave privada de la autoridad de certificación raíz. Esta es una excepción especial para las cadenas de certificados autofirmados en entornos de desarrollo.

El siguiente código utiliza el openssl Herramienta de línea de comandos para crear una cadena completa de certificados autofirmados para su implementación de MongoDB. Este proceso crea todos los certificados y claves necesarios, formateados para su uso con MongoDB.

# Creating self-signed CA cert and SAN cert for localhost
# aka mdbinstance.mydevelopment.net
#=====================================================================================
openssl req -x509 -nodes -sha256 -days 1825 -newkey rsa:4096 \
-keyout rootCA.key -out rootCA.crt -subj="/CN=ca.mydevelopment.net"
openssl req -newkey rsa:4096 -keyout server.key -nodes \
-out domain.csr -subj "/CN=server.mydevelopment.net"
openssl req -x509 -nodes -CA rootCA.crt -CAkey rootCA.key -in domain.csr \
-out mdbinstance.mydevelopment.net.crt -days 3560 -nodes \
-subj '/CN=<mdbinstance_mydevelopment_net>' -extensions san -config <( \
echo '[req]'; \
echo 'distinguished_name=req'; \
echo '[san]'; \
echo 'subjectAltName=DNS:localhost,DNS:mdbinstance.mydevelopment.net')
cat rootCA.key rootCA.crt >rootCAcombined.pem
cat server.key mdbinstance.mydevelopment.net.crt >serverCert.pem

Los comandos anteriores realizan las siguientes acciones:

  1. Crea un certificado de CA raíz, rootCA.crt, y su clave privada, rootCA.key

  2. Genera una solicitud de firma de certificado, o CSR, para su servidor

  3. Crea un certificado de servidor con nombres alternativos de sujeto, o SAN, tanto para localhost como para mdbinstance.mydevelopment.net

  4. Combina los certificados y claves en los archivos PEM necesarios para MongoDB

Los comandos anteriores producen los siguientes archivos.

Para la configuración del servidor MongoDB:

  • rootCAcombined.pem:Certificado CA combinado y clave privada

  • serverCert.pem:Certificado de servidor combinado y clave privada

Para aplicaciones de cliente:

  • rootCA.crt:El certificado CA, utilizado para confiar en el certificado del servidor

  • serverCert.pem:El certificado del servidor con su clave privada, utilizado para la conexión TLS

Una vez generados los certificados, configure su servidor MongoDB para usarlos. La siguiente configuración muestra la sección net del archivo mongod.conf, centrándose en la configuración de TLS.

# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Binds to all network interfaces - use only in secure networks
tls:
mode: requireTLS # Forces all connections to use TLS
certificateKeyFile: /path/to/serverCert.pem # Server certificate with private key
CAFile: /path/to/rootCAcombined.pem # CA certificate with private key

La configuración anterior incluye:

  • port: Puerto estándar de MongoDB 27017

  • bindIp:Configúrelo en 0.0.0.0 para permitir conexiones desde cualquier dirección IP, apropiado solo para entornos de desarrollo en redes privadas seguras

  • tls.mode:Configúrelo en requireTLS para garantizar que todas las conexiones utilicen cifrado TLS

  • certificateKeyFile:Ruta a su certificado de servidor con su clave privada

  • CAFile:Ruta a su certificado de CA con su clave privada

Después de actualizar el archivo de configuración, reinicie su servidor MongoDB para aplicar la configuración TLS. Su instancia de MongoDB requerirá TLS para todas las conexiones.

Los siguientes ejemplos demuestran cómo establecer conexiones a su servidor MongoDB configurado para TLS.

mongosh --tls --tlsCAFile /path/to/rootCA.crt --tlsCertificateKeyFile \
/path/to/serverCert.pem 'mongodb://userid:password@hostname.domain'

Para las conexiones de MongoDB Compass, codifique las rutas de los certificados en la cadena de conexión. Por ejemplo, convierta las barras diagonales (/) en %2F:

mongodb://userid:password@hostname.domain/?directConnection=true&tls=true&tlsCAFile=%2Fpath%2Fto%2FrootCA.crt&tlsCertificateKeyFile=%2Fpath%2Fto%2Fserver_certificate.pem
$mongodb_client = new MongoDB\Client($mongodb_uri,
[
'tls' => true, # Enable TLS for the connection
'tlsCAFile' => $mongodb_ca_cert_path, # Path to your CA certificate
'tlsCertificateKeyFile' => $mongodb_cert_path # Path to your client certificate
]
);

Para todos los clientes, deberá proporcionar:

  1. La opción para habilitar TLS

  2. La ruta a su certificado CA para confiar en el servidor

  3. Opcionalmente, para TLS mutuo, la ruta a un certificado de cliente

Probar su conexión confirma que su configuración TLS funciona correctamente. Si la conexión es correcta, su implementación de MongoDB está protegida con cifrado TLS.

Aunque los certificados autofirmados son adecuados para el desarrollo, los entornos de producción deberían usar certificados de autoridades de certificación de confianza. Si tiene un nombre de dominio registrado, Let's Encrypt ofrece certificados gratuitos de amplia confianza.

Al utilizar certificados de CA reconocidas, asegúrese de que los certificados raíz e intermedios de la CA sean parte del almacén de confianza del sistema operativo tanto en el servidor como en los clientes.

En implementaciones de producción con certificados confiables, configure los ajustes del servidor MongoDB usando el siguiente código:

net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem # Your trusted certificate with private key

En la configuración anterior, mongodb.pem contiene el certificado de su servidor, firmado por una CA de confianza, y su clave privada. Dado que el sistema operativo ya confía en la CA, no necesita especificar el parámetro CAFile.

Para obtener más detalles sobre la configuración de MongoDB con certificados de confianza, consulta Configura las instancias de MongoDB para TLS/SSL en implementaciones autogestionadas.

Volver

Configurar mongod y mongos

En esta página