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.
Cadenas de certificados autofirmados para TLS local
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.
Certificados de servidor en comunicaciones TLS
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.
Diseño de cadena de certificados autofirmados
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.
Crear una cadena de certificados autofirmados
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:
Cree un certificado de CA raíz,
rootCA.crt, y su clave privada,rootCA.keyGenera una solicitud de firma de certificado, o CSR, para tu servidor
Crea un certificado de servidor con nombres alternativos de sujeto o SAN para
localhostymdbinstance.mydevelopment.netCombina 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 privadaserverCert.pem{: Certificado de servidor combinado y clave privada
Para las aplicaciones cliente:
rootCA.crt: El certificado CA, usado para confiar en el certificado del servidorserverCert.pem: El certificado de servidor con su clave privada, utilizado para la conexión TLS
MongoDB Server Configuración de 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 27017bindIpPara 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.0tls.mode": Establece enrequireTLSpara asegurar que todas las conexiones usen cifrado TLS"certificateKeyFileRuta al certificado de tu servidor con su llave privadaCAFile: 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.
Conexión a MongoDB con TLS
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:
La opción para activar TLS
La ruta a tu certificado CA para confiar en el servidor
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.
Uso de autoridades certificadoras de confianza
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.