Overview
Este documento le ayuda a configurar una nueva instancia de MongoDB para que admita TLS/SSL. Para obtener instrucciones sobre cómo actualizar un clúster que actualmente no usa TLS/SSL a uno que sí lo use, consulte Actualice un clúster para utilizar TLS/SSL en su lugar.
Para configurar un entorno de desarrollo local con TLS/SSL, consulta Desarrollar MongoDB localmente con TLS.
MongoDB utiliza las librerías nativas de TLS/SSL OS:
Plataforma | Biblioteca TLS/SSL |
|---|---|
Windows | Canal seguro (Schannel) |
Linux/BSD | OpenSSL |
macOS | Transporte seguro |
Nota
MongoDB deshabilita el soporte para el cifrado TLS 1.0 en sistemas donde TLS 1.1+ está disponible.
El cifrado TLS/SSL de MongoDB solo permite el uso de cifrados TLS/SSL fuertes con una longitud de clave mínima de 128 bits para todas las conexiones.
Las compilaciones heredadas de MongoDB para Linux de 64 bits (x64) no incluyen compatibilidad con TLS/SSL.
Requisitos previos
Importante
Una descripción completa de los certificados TLS/SSL, PKI (Infraestructura de Llave Pública) y la Autoridad de Certificación está fuera del alcance de este documento. Esta página asume conocimientos previos de TLS/SSL, así como el acceso a certificados válidos.
Autoridades de Certificación
Para uso en producción, la implementación de MongoDB debe utilizar certificados válidos generados y firmados por una autoridad certificadora. El usuario o la organización pueden generar y mantener una autoridad de certificación independiente, o utilizar certificados generados por proveedores de TLS de terceros. La obtención y gestión de certificados está fuera del alcance de esta documentación.
mongod y mongos archivo de clave de certificado
Al establecer una conexión TLS/SSL, el mongod / mongos presenta un archivo de clave de certificado a sus clientes para establecer su identidad. [1] El archivo de llaves del certificado contiene un certificado de llave pública y su llave privada asociada, pero solo el componente público se revela al cliente.
MongoDB puede utilizar cualquier certificado TLS/SSL válido emitido por una autoridad de certificación o un certificado autofirmado. Si se usa un certificado autofirmado, aunque el canal de comunicación estará cifrado para evitar la interceptación de la conexión, no habrá ninguna validación de la identidad del servidor. Esto deja al usuario vulnerable a un ataque de intermediario. El uso de un certificado firmado por una autoridad de certificación de confianza permitirá a los drivers de MongoDB verificar la identidad del servidor.
En general, evite usar certificados autofirmados a menos que la red sea de confianza.
Con respecto a los certificados para los miembros del set de réplicas y del clúster, se aconseja utilizar certificados diferentes en servidores distintos. Esto minimiza la exposición de la llave privada y permite la validación del nombre de host.
Nota
Si una implementación de MongoDB no está configurada para usar un archivo de CA, omite la validación del certificado del cliente.
| [1] | Para el modo FIPS, se debe garantizar que el certificado sea compatible con FIPS (es decir, que use un algoritmo compatible con FIPS) y que la llave privada cumpla con el estándar PKCS#8. Si se necesita convertir una llave privada al formato PKCS#8, existen varias herramientas de conversión, como openssl pkcs8 y otras. |
Procedimientos (Usando la Configuración de net.tls)
Nota
MongoDB proporciona configuraciones net.tls (y opciones de línea de comandos --tls) que corresponden a las configuraciones net.ssl (y opciones de línea de comandos --ssl). La nueva configuración de tls proporciona una funcionalidad idéntica a la configuración de ssl, ya que MongoDB siempre ha sido compatible con TLS 1.0 y versiones posteriores.
Los procedimientos en esta sección utilizan la configuración de net.tls. Para los procedimientos que utilizan el alias net.ssl, consultar Procedimientos (con la configuración net.ssl).
Configurar mongod y mongos con un certificado y una clave TLS/SSL
La siguiente sección configura mongod / mongos para usar conexiones TLS/SSL. Con estos ajustes TLS/SSL, mongod / mongos presenta su archivo de clave de certificado al cliente. Sin embargo, la mongod / mongos no requiere un archivo de clave de certificado del cliente para verificar la identidad del cliente. Para requerir el archivo de clave de certificado del cliente, consulta Configurar mongod y mongos con Validación del certificado del cliente en su lugar.
Nota
El procedimiento utiliza la configuración de net.tls. Para los procedimientos que utilizan la configuración net.ssl, consulta Procedimientos (Uso de la configuración net.ssl).
Para utilizar conexiones TLS/SSL, se deben incluir las siguientes configuraciones TLS/SSL en el archivo de configuración de la instancia de mongod / mongos :
Configuración | notas |
|---|---|
Se debe establecer en Esta configuración restringe que cada servidor use solo conexiones cifradas TLS/SSL. También puede especificar el valor Si configuras | |
Por ejemplo, considere el siguiente archivo de configuración para una mongod instancia:
net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Se pueden usar los almacenes de certificados SSL del sistema para Windows y macOS. Para usar el almacén de certificados SSL del sistema, se debe especificar net.tls.certificateSelector en lugar de especificar el archivo de clave del certificado.
Configuración | notas |
|---|---|
Se debe establecer en Esta configuración restringe que cada servidor use solo conexiones cifradas TLS/SSL. También puede especificar el valor Si configuras | |
Configura la propiedad (ya sea Esta configuración se utiliza para seleccionar el certificado. Consulta |
Por ejemplo, considere el siguiente archivo de configuración para una mongod instancia:
net: tls: mode: requireTLS certificateSelector: subject="<CertificateCommonName>" systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Una mongod instancia que utilice la configuración anterior solo puede aceptar conexiones TLS/SSL:
mongod --config <path/to/configuration/file>
Consulte Conectar a instancias de MongoDB usando cifrado para obtener más información sobre cómo conectarse con TLS/SSL.
Tip
También se puede configurar mongod y mongos usando opciones de línea de comandos en lugar del archivo de configuración:
Para
mongod, consultar:--tlsMode;--tlsCertificateKeyFile; y--tlsCertificateSelector.Para
mongos, consultar:--tlsMode;--tlsCertificateKeyFile; y--tlsCertificateSelector.
Configurar mongod y mongos con validación de certificado de cliente
La siguiente sección configura mongod / mongos para que use conexiones TLS/SSL y realice la validación del certificado del cliente. Con estas configuraciones de TLS/SSL:
mongod/mongospresenta su archivo de clave de certificado al cliente para su verificación.mongod/mongosrequiere un archivo de clave de certificado del cliente para verificar la identidad del cliente.
Nota
El procedimiento utiliza la configuración net.tls. Para los procedimientos que utilizan la configuración net.ssl, consulta Procedimientos (Uso de la configuración net.ssl).
Para utilizar conexiones TLS/SSL y realizar la validación de certificados del cliente, incluya los siguientes ajustes TLS/SSL en el mongod mongos archivo de configuración de la instancia /:
Nota
Puedes utilizar los almacenes de certificados SSL del sistema para Windows y macOS. Para usar el almacén de certificados SSL del sistema, especifica net.ssl.certificateSelector en lugar de especificar el archivo de clave del certificado.
Configuración | notas |
|---|---|
Se debe establecer en Esta configuración restringe que cada servidor use solo conexiones cifradas TLS/SSL. También puede especificar el valor Si configuras | |
Establezca la ruta del archivo que contiene la cadena de certificados para verificar los certificados de cliente. La instancia |
Importante
Al iniciar una instancia mongod con TLS/SSL activado, debes especificar un valor para la bandera --tlsCAFile, la opción de configuración net.tls.CAFile o el parámetro tlsUseSystemCA.
--tlsCAFile, tls.CAFile, y tlsUseSystemCA son mutuamente excluyentes.
Por ejemplo, considere el siguiente archivo de configuración para una mongod instancia:
net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Una instancia de mongod que utiliza la configuración anterior solo puede aceptar conexiones TLS/SSL y requiere un certificado válido de sus clientes:
mongod --config <path/to/configuration/file>
Los clientes deben especificar las conexiones TLS/SSL y presentar su archivo de clave de certificado a la instancia. Consulta Conectar a instancias de MongoDB que requieren certificados de cliente para obtener más información sobre cómo conectarte con TLS/SSL.
Tip
También se puede configurar mongod y mongos usando opciones de línea de comandos en lugar del archivo de configuración:
Para
mongod, consulte--tlsMode,--tlsCertificateKeyFiley--tlsCAFile.Para
mongos, consulta--tlsMode,--tlsCertificateKeyFile,--tlsCAFile.
Bloquear certificados revocados para los clientes
Nota
El procedimiento utiliza la configuración de net.tls. Para los procedimientos que utilizan la configuración net.ssl, consulta Procedimientos (Uso de la configuración net.ssl).
Para evitar que los clientes con certificados revocados se conecten a la instancia mongod o mongos, puedes utilizar una Lista de Revocación de Certificados (CRL).
Para especificar un Archivo CRL, incluye establecido en un archivo que contiene certificados net.tls.CRLFile revocados.
Por ejemplo:
net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem CRLFile: /etc/ssl/revokedCertificates.pem
Los clientes que presentan certificados que están listados en el archivo /etc/ssl/revokedCertificates.pem no pueden conectarse.
Tip
También se puede configurar la lista de certificados revocados con la opción de línea de comandos.
Para
mongod, consulte--tlsCRLFile.Para
mongos, consulte--tlsCRLFile.
Se debe validar solo si un cliente presenta un certificado
En la mayoría de los casos, es importante asegurarse de que los clientes presenten certificados válidos. Sin embargo, si hay clientes que no pueden presentar un certificado de cliente o están en proceso de transición para utilizar un certificado, es posible que solo se desee validar los certificados de los clientes que presentan un certificado.
Nota
El procedimiento utiliza la configuración de net.tls. Para los procedimientos que utilizan la configuración de net.ssl, consulta Procedimientos (Usando la configuración de net.ssl).
Para omitir la validación de certificados de cliente para los clientes que no presentan un certificado, se debe incluir net.tls.allowConnectionsWithoutCertificates configurado en true.
Por ejemplo:
net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem allowConnectionsWithoutCertificates: true
Un mongod / mongos que se ejecuta con estos ajustes permite la conexión desde:
Clientes que no presenten un certificado.
Clientes que presenten un certificado válido.
Nota
Si el cliente presenta un certificado, este debe ser válido.
Todas las conexiones, incluidas aquellas que no han presentado certificados, están cifradas mediante TLS/SSL.
Consultar Configuración de TLS/SSL para clientes para obtener más información sobre las conexiones TLS/SSL para clientes.
Tip
También puede configurar utilizando las opciones de la línea de comandos:
Para
mongod, consulte--tlsAllowConnectionsWithoutCertificates.Para
mongos, consulte--tlsAllowConnectionsWithoutCertificates.
Prohibir protocolos
Nota
El procedimiento utiliza la configuración de net.tls. Para los procedimientos que utilizan la configuración de net.ssl, consulta Procedimientos (Usando la configuración de net.ssl).
Para evitar que los servidores de MongoDB acepten conexiones entrantes que usen protocolos específicos, se debe incluir net.tls.disabledProtocols configurado en los protocolos no permitidos.
Por ejemplo, la siguiente configuración impide que mongod / mongos acepten conexiones entrantes que usen TLS1_0 o TLS1_1
net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem disabledProtocols: TLS1_0,TLS1_1
Tip
También puede configurar utilizando las opciones de la línea de comandos:
Para
mongod, consulte--tlsDisabledProtocols.Para
mongos, consulte--tlsDisabledProtocols.
Contraseña del certificado TLS/SSL
Si los archivos de claves de certificado de mongod / mongos están cifrados, se debe incluir net.tls.certificateKeyFilePassword configurado con la frase de contraseña.
Tip
Para evitar especificar la frase de contraseña en texto claro, puedes utilizar un valor de expansión en el archivo de configuración.
Tip
También puede configurar utilizando las opciones de la línea de comandos:
Para
mongod, consulte--tlsCertificateKeyFilePassword.Para
mongos, consulte--tlsCertificateKeyFilePassword.
Rotación de certificados en línea
A partir de MongoDB 5.0, se pueden rotar los siguientes archivos de claves de certificado on-demand:
CRL (Certificate Revocation List) files(en las plataformas Linux y Windows)
Para rotar uno o más de estos certificados:
Se debe sustituir el certificado o los certificados que se desean rotar en el sistema de archivos, teniendo en cuenta las siguientes restricciones:
Cada nuevo certificado debe tener el mismo nombre de archivo y la misma ruta de archivo que el certificado que está reemplazando.
Si rota un certificado cifrado
TLS Certificate, su contraseña debe ser la misma que la contraseña del certificado antiguo (como se especifica en los ajustes del archivo de configuracióncertificateKeyFilePassword). La rotación de certificados admite a la solicitud de contraseña interactiva.
Se debe conectar
mongoshamongodo a la instanciamongosen la que se desee realizar la rotación de certificados.Se debe ejecutar el comando
rotateCertificateso el método de shelldb.rotateCertificates()para rotar los certificados utilizados por lamongodo la instanciamongos.
Cuando tiene lugar la rotación de certificados:
Las conexiones existentes a la instancia de
mongodomongosno se terminan y continuarán usando los certificados antiguos.Cualquier nueva conexión utilizará los nuevos certificados.
Los archivos de certificado incorrectos, caducados, revocados o ausentes harán que falle la rotación del certificado, pero no invalidarán la configuración TLS existente ni terminarán el proceso mongod o mongos en ejecución.
Antes de MongoDB 5.0, la rotación de certificados requería tiempo de inactividad y se realizaba habitualmente durante las ventanas de mantenimiento.
Consulte rotateCertificates o db.rotateCertificates() para obtener consideraciones adicionales e instrucciones completas de uso.
Ejecutar en moda FIPS
Nota
TLS/SSL compatible con FIPS está disponible solo en MongoDB Enterprise. Ve Configurar MongoDB para FIPS si deseas obtener más información.
Consultar Configurar MongoDB para FIPS para obtener más detalles.
Próximos pasos
Para configurar el soporte de TLS/SSL para clientes, consulta Configuración de TLS/SSL para Clientes.
Procedimientos (Usando la Configuración de net.ssl)
Nota
MongoDB proporciona configuraciones net.tls (y opciones de línea de comandos --tls) que corresponden a las configuraciones net.ssl (y opciones de línea de comandos --ssl). La nueva configuración de tls proporciona una funcionalidad idéntica a la configuración de ssl, ya que MongoDB siempre ha sido compatible con TLS 1.0 y versiones posteriores.
Los procedimientos en esta sección utilizan la configuración de net.ssl. Para los procedimientos que utilizan los alias de net.tls, consulte Procedimientos (Usando la configuración de net.tls).
Configurar mongod y mongos con un certificado y una clave TLS/SSL
La siguiente sección configura mongod / mongos para usar conexiones TLS/SSL. Con estos ajustes TLS/SSL, mongod / mongos presenta su archivo de clave de certificado al cliente. Sin embargo, la mongod / mongos no requiere un archivo de clave de certificado del cliente para verificar la identidad del cliente. Para requerir el archivo de clave de certificado del cliente, consulta Configurar mongod y mongos con Validación del certificado del cliente en su lugar.
Para usar conexiones TLS/SSL, se deben incluir las siguientes configuraciones TLS/SSL en el archivo de configuración de la instancia de mongod / mongos :
Configuración | notas |
|---|---|
| Se debe establecer en Esta configuración restringe que cada servidor use solo conexiones cifradas TLS/SSL. También puedes especificar |
|
Por ejemplo, considere el siguiente archivo de configuración para una mongod instancia:
net: ssl: mode: requireSSL PEMKeyFile: /etc/ssl/mongodb.pem systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Puedes utilizar los almacenes de certificados SSL del sistema para Windows y macOS. Para usar el almacén de certificados SSL del sistema, especifica net.ssl.certificateSelector en lugar de especificar el archivo de clave del certificado.
Configuración | notas |
|---|---|
| Se debe establecer en Esta configuración restringe que cada servidor use solo conexiones cifradas TLS/SSL. También puedes especificar |
| Configura la propiedad (ya sea Esta configuración se utiliza para seleccionar el certificado. Consulte |
Por ejemplo, considere el siguiente archivo de configuración para una mongod instancia:
net: ssl: mode: requireSSL certificateSelector: subject="<CertificateCommonName>" systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Una mongod instancia que utilice la configuración anterior solo puede aceptar conexiones TLS/SSL:
mongod --config <path/to/configuration/file>
Consulte Conectar a instancias de MongoDB usando cifrado para obtener más información sobre cómo conectarse con TLS/SSL.
Configurar mongod y mongos con validación de certificado de cliente
La siguiente sección configura mongod / mongos para que use conexiones TLS/SSL y realice la validación del certificado del cliente. Con estas configuraciones de TLS/SSL:
mongod/mongospresenta su archivo de clave de certificado al cliente para su verificación.mongod/mongosrequiere un archivo de clave de certificado del cliente para verificar la identidad del cliente.
Para usar conexiones TLS/SSL, se deben incluir las siguientes configuraciones TLS/SSL en el archivo de configuración de la instancia de mongod / mongos :
Nota
Puedes utilizar los almacenes de certificados SSL del sistema para Windows y macOS. Para usar el almacén de certificados SSL del sistema, especifica net.ssl.certificateSelector en lugar de especificar el archivo de clave del certificado.
Configuración | notas |
|---|---|
| Se debe establecer en Esta configuración restringe que cada servidor use solo conexiones cifradas TLS/SSL. También puedes especificar |
| |
| Establezca la ruta del archivo que contiene la cadena de certificados para verificar los certificados de cliente. La instancia |
Por ejemplo, considere el siguiente archivo de configuración para una mongod instancia:
net: ssl: mode: requireSSL PEMKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Una instancia de mongod que utiliza la configuración anterior solo puede aceptar conexiones TLS/SSL y requiere un certificado válido de sus clientes:
mongod --config <path/to/configuration/file>
Los clientes deben especificar las conexiones TLS/SSL y presentar su archivo de clave de certificado a la instancia. Consulta Conectar a instancias de MongoDB que requieren certificados de cliente para obtener más información sobre cómo conectarte con TLS/SSL.
Tip
Bloquear certificados revocados para los clientes
Para evitar que los clientes con certificados revocados se conecten a la instancia mongod o mongos, puedes utilizar una Lista de Revocación de Certificados (CRL).
Para especificar un archivo CRL, incluye net.ssl.CRLFile configurado en un archivo que contenga certificados revocados.
Por ejemplo:
net: ssl: mode: requireSSL PEMKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem CRLFile: /etc/ssl/revokedCertificates.pem
Los clientes que presentan certificados que están listados en el archivo /etc/ssl/revokedCertificates.pem no pueden conectarse.
Se debe validar solo si un cliente presenta un certificado
En la mayoría de los casos, es importante asegurarse de que los clientes presenten certificados válidos. Sin embargo, si hay clientes que no pueden presentar un certificado de cliente o están en proceso de transición para utilizar un certificado, es posible que solo se desee validar los certificados de los clientes que presentan un certificado.
Para omitir la validación de certificados de cliente para los clientes que no presentan un certificado, incluye net.ssl.allowConnectionsWithoutCertificates configurado en true.
Por ejemplo:
net: ssl: mode: requireSSL PEMKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem allowConnectionsWithoutCertificates: true
Un mongod / mongos que se ejecuta con estos ajustes permite la conexión desde:
Clientes que no presenten un certificado.
Clientes que presenten un certificado válido.
Nota
Si el cliente presenta un certificado, este debe ser válido.
Todas las conexiones, incluidas aquellas que no han presentado certificados, están cifradas mediante TLS/SSL.
Consultar Configuración de TLS/SSL para clientes para obtener más información sobre las conexiones TLS/SSL para clientes.
Prohibir protocolos
Para evitar que los servidores de MongoDB acepten conexiones entrantes que usen protocolos específicos, incluye net.ssl.disabledProtocols configurado en los protocolos no permitidos.
Por ejemplo, la siguiente configuración impide que mongod / mongos acepten conexiones entrantes que usen TLS1_0 o TLS1_1
net: ssl: mode: requireSSL PEMKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem disabledProtocols: TLS1_0,TLS1_1
Contraseña del certificado TLS/SSL
Si los archivos de clave de certificado para mongod / mongos están cifrados, incluye net.ssl.PEMKeyPassword configurado con la frase de contraseña.
Ejecutar en moda FIPS
Nota
TLS/SSL compatible con FIPS está disponible solo en MongoDB Enterprise. Ve Configurar MongoDB para FIPS si deseas obtener más información.
Consultar Configurar MongoDB para FIPS para obtener más detalles.
Próximos pasos
Para configurar el soporte de TLS/SSL para clientes, consulta Configuración de TLS/SSL para Clientes.