Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /
TLS/SSL

Desarrollo de MongoDB localmente con TLS

MongoDB Atlas proporciona certificados TLS válidos para entornos de desarrollo, pero puede que necesites implementar un despliegue on-premises con configuraciones personalizadas de seguridad. Esta guía proporciona instrucciones para configurar el cifrado TLS en una implementación local de MongoDB, permitiendo crear un entorno de pruebas seguro que se asemeje estrechamente a la infraestructura de producción.

Usando ambos Community Edition o Enterprise MongoDB localmente con cifrado TLS proporciona un entorno realista para el desarrollo, la prueba y la validación de los comportamientos de seguridad de tu aplicación antes de su implementación.

En entornos de producción, los servidores MongoDB utilizan certificados firmados por autoridades certificadoras de confianza o CAs. Para el desarrollo local, puedes usar cualquiera de las siguientes opciones:

  • Certificados comerciales o de CA pública: si has registrado un nombre de dominio, puedes obtener un certificado de una autoridad certificadora reconocida.

  • Certificados de CA empresarial: Si su organización mantiene una autoridad certificadora privada como EJBCA o TinyCert, puedes solicitar certificados a través de tu 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: en entornos de desarrollo local aislados, las cadenas de certificados autofirmados proporcionan una solución práctica cuando no hay otras opciones disponibles.

Puedes implementar una cadena de certificados autofirmados para implementaciones locales de MongoDB mediante los siguientes pasos. Al crear tu propia autoridad de certificación y certificados de servidor, puedes simular conexiones cifradas TLS sin necesidad de servicios externos.

Importante

Solo utiliza cadenas de certificados autofirmados en entornos de desarrollo aislados. Las cadenas de certificados autofirmados no incluyen los mecanismos de verificación de confianza de los certificados emitidos correctamente y pueden presentar vulnerabilidades de seguridad. Nunca utilices certificados autofirmados en producción ni al trabajar con datos sensibles.

En las comunicaciones seguras, los certificados de servidor demuestran la identidad del servidor a los clientes que se conectan, previniendo ataques de intermediarios y facilitando el intercambio seguro de claves para comunicaciones encriptadas.

En un apretón de manos TLS típico, el cliente verifica el certificado del servidor comprobando si:

  • El certificado está firmado por una autoridad certificadora de confianza

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

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

El cliente solo acepta certificados raíz y CA intermedios si están presentes en el almacén de confianza local del cliente. Para certificados emitidos correctamente, solo la autoridad emisora puede acceder a la clave privada del certificado raíz, nunca con el servidor.

Para tu configuración local de MongoDB con TLS y certificados autofirmados, necesitas crear y gestionar varios archivos de certificado que cumplen diferentes propósitos en el proceso de enlace de TLS.

Requisitos del servidor:

  • Una autoridad de certificación (CA) autofirmada que actúa como raíz de confianza propia.

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

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

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

Requisitos del cliente:

  • El certificado de la autoridad de certificación raíz autofirmado, que es necesario para verificar el certificado del servidor.

  • Los certificados del cliente y sus claves privadas, que son opcionales y se utilizan para el mTLS.

Al configurar MongoDB, especifique las rutas a estos archivos de certificados 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 certificadora raíz. Esta es una excepción especial para 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 de certificados autofirmados completa para tu implementación de MongoDB. Este proceso crea todos los certificados y llaves 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. Cree 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 tu servidor

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

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

Los comandos anteriores generan los siguientes archivos.

Para la configuración del servidor MongoDB:

  • rootCAcombined.pem: Certificado CA combinado y llave privada

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

Para las aplicaciones cliente:

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

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

Una vez que se hayan generado los certificados, se debe configurar el servidor de MongoDB para usarlos. La configuración a continuación muestra la sección net del archivo mongod.conf, enfocándose en los ajustes 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

  • bindIpPara permitir conexiones desde cualquier dirección IP, debes establecerlo en 6100: esto es apropiado solo para entornos de desarrollo en redes privadas seguras.0.0.0.0

  • tls.mode": Establece en requireTLS para asegurar que todas las conexiones usen cifrado TLS"

  • certificateKeyFileRuta al certificado de tu servidor con su llave privada

  • CAFile: Ruta a tu certificado CA con su llave privada

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

Los siguientes ejemplos demuestran cómo establecer conexiones con su servidor de 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 en URL las rutas de los certificados en la cadena de conexión. Por ejemplo, convierte las barras diagonales (/) a %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, se debe proporcionar:

  1. La opción para activar TLS

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

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

Probar tu conexión confirma que tu configuración TLS está funcionando correctamente. Si la conexión tiene éxito, su implementación de MongoDB estará protegido con cifrado TLS.

Aunque los certificados autofirmados funcionan para el desarrollo, los entornos de producción deben utilizar certificados de autoridades certificadoras confiables. Si tienes un nombre de dominio registrado, Let's Encrypt ofrece certificados gratuitos ampliamente confiables.

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

En implementaciones productivas con certificados de confianza, configure la configuración de su servidor MongoDB utilizando 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 tu servidor, firmado por una AC de confianza, y su clave privada. Debido a que la CA ya está confiable por el sistema operativo, no necesitas especificar el parámetro CAFile.

Para obtener más detalles sobre cómo configurar MongoDB con certificados de confianza, consulta Configura mongod y mongos para TLS/SSL.

Volver

Configurar mongod y mongos

En esta página