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.
Cadenas de certificados autofirmados para TLS local
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.
Certificados de servidor en comunicaciones TLS
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.
Diseño de la cadena de certificados autofirmados
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.
Crear una cadena de certificados autofirmados
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:
Crea un certificado de CA raíz,
rootCA.crt, y su clave privada,rootCA.keyGenera una solicitud de firma de certificado, o CSR, para su servidor
Crea un certificado de servidor con nombres alternativos de sujeto, o SAN, tanto para
localhostcomo paramdbinstance.mydevelopment.netCombina 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 privadaserverCert.pem:Certificado de servidor combinado y clave privada
Para aplicaciones de cliente:
rootCA.crt:El certificado CA, utilizado para confiar en el certificado del servidorserverCert.pem:El certificado del servidor con su clave privada, utilizado para la conexión TLS
Configuración TLS del servidor MongoDB
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 27017bindIp:Configúrelo en 0.0.0.0 para permitir conexiones desde cualquier dirección IP, apropiado solo para entornos de desarrollo en redes privadas segurastls.mode:Configúrelo enrequireTLSpara garantizar que todas las conexiones utilicen cifrado TLScertificateKeyFile:Ruta a su certificado de servidor con su clave privadaCAFile: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.
Conexión a MongoDB con TLS
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:
La opción para habilitar TLS
La ruta a su certificado CA para confiar en el servidor
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.
Uso de autoridades de certificación de confianza
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.