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
/ /
/ / /

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 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 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 empresariales: si su organización mantiene una autoridad de certificación privada como EJBCA o TinyCert, puedes solicitar certificados a través de tu departamento de informática.

  • 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.

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 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 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:

  • 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 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 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. 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 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": 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 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 activar TLS

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

  3. Opcionalmente, para TLS mutuo, la ruta a 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 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