MongoDB admite autenticación con certificado X.509 para uso con un Conexión TLS/SSL. Los nodos de un clúster y los nodos de un set de réplicas pueden utilizar certificados x.509 para verificar su membresía al clúster o al set de réplicas en lugar de archivos de llaves. La autenticación de membresía es un proceso interno.
Nota
MongoDB deshabilita el soporte para el cifrado TLS 1.0 en sistemas donde TLS 1.1+ está disponible.
Habilitar la autenticación interna también habilita el Control de acceso basado en roles en implementaciones autogestionadas. Los clientes deben autenticarse como usuario para poder conectarse y realizar operaciones en la implementación.
Consulta el tutorial Gestionar usuarios y roles en implementaciones autogestionadas para obtener instrucciones sobre cómo agregar usuarios a la implementación.
Consulta el tutorial Utiliza los certificados X.509 para autenticar clientes en implementaciones autogestionadas para obtener instrucciones sobre cómo usar certificados X.509 para la autenticación de usuarios.
Importante
Una descripción completa de TLS/SSL, los certificados PKI (Infraestructura de clave pública), en particular los certificados X.509, y la Autoridad de certificación está fuera del alcance de este documento. Este tutorial asume que se tiene un conocimiento previo de TLS/SSL y también acceso a certificados X.509 válidos.
Nodo X.509 Certificado
Nota
Debes tener certificados X.509 válidos.
Si especificas --tlsAllowInvalidCertificates o net.tls.allowInvalidCertificates: true, un certificado inválido es suficiente solo para establecer una conexión TLS, pero es insuficiente para la autenticación.
Requisitos del certificado
Utiliza los certificados de miembro para verificar la membresía a un clúster fragmentado o a un set de réplicas. Los certificados de los nodos se almacenan en net.tls.clusterFile y net.tls.certificateKeyFile. Requisitos del certificado de nodo:
Una única Autoridad de Certificación (CA) debe emitir todos los certificados x.509 para los nodos de un clúster o un set de réplicas.
El certificado x.509 no debe estar caducado.
El Nombre Distinguido (
DN), que se encuentra en elsubjectdel certificado de nodo, debe especificar un valor no vacío para al menos uno de los siguientes atributos:la organización (
O)la Unidad Organizativa (
OU)El componente del dominio (
DC)
En implementaciones multi-cluster, cada clúster debe usar un certificado de nodo X.509 diferente. Cada certificado debe tener valores únicos en los campos del Nombre Distinguido (ND)
O,OUyDC.Si dos clústeres tienen certificados con los mismos valores de nombre distinguido, un servidor comprometido en un clúster puede autenticarse como nodo del otro.
Cada certificado de nodo de clúster debe tener
Os,OUs yDCs idénticos en sus certificadosnet.tls.clusterFileynet.tls.certificateKeyFile. Esto también se aplica al valortlsX509ClusterAuthDNOverride, si está configurado. El orden de los atributos no importa.Aquí tienes un ejemplo. Los dos
DNde abajo tienen especificaciones coincidentes paraOyOU, yDCno está especificado.CN=host1,OU=Dept1,O=MongoDB,ST=NY,C=US C=US, ST=CA, O=MongoDB, OU=Dept1, CN=host2 El siguiente ejemplo es incorrecto porque los
DNs no coinciden. UnDNtiene dos especificaciones deOUy el otro tiene solo una especificación deOU.CN=host1,OU=Dept1,OU=Sales,O=MongoDB CN=host2,OU=Dept1,O=MongoDB El Nombre Común (
CN) o una de las entradas de Nombre Alternativo del Sujeto (SAN) deben coincidir con el nombre del servidor para los demás nodos del clúster. A partir de MongoDB 4.2, al compararSANs, MongoDB puede comparar nombres DNS o direcciones IP. En versiones anteriores, MongoDB solo compara nombres DNS.Por ejemplo, los certificados de un clúster podrían tener los siguientes
subjects:subject= CN=<myhostname1>,OU=Dept1,O=MongoDB,ST=NY,C=US subject= CN=<myhostname2>,OU=Dept1,O=MongoDB,ST=NY,C=US subject= CN=<myhostname3>,OU=Dept1,O=MongoDB,ST=NY,C=US Si el certificado utilizado como el
certificateKeyFileincluyeextendedKeyUsage, el valor debe incluir tantoclientAuth(“Autenticación de cliente web TLS”) comoserverAuth(“Autenticación de servidor web TLS”).extendedKeyUsage = clientAuth, serverAuth Si el certificado utilizado como
clusterFileincluyeextendedKeyUsage, el valor debe incluirclientAuth.extendedKeyUsage = clientAuth
Configurar set de réplicas/clúster
Excepto durante los procedimientos de actualización progresiva, cada componente de un conjunto de réplicas o cluster fragmentado debe usar la misma configuración de --clusterAuthMode para garantizar que pueda conectarse de manera segura con todos los demás componentes en la implementación.
Para las implementaciones de set de réplicas, esto incluye todos los mongod nodos del set de réplicas.
Para implementaciones de clúster, esto incluye todas las instancias de mongod o mongos.
Nota
mongod y mongos se enlazan a localhost por defecto. Si los miembros de la implementación se ejecutan en hosts diferentes o si se desea que clientes remotos se conecten a la implementación, se debe especificar --bind_ip o net.bindIp.
Usa opciones de línea de comandos (tls)
Nota
Los procedimientos en esta sección usan la configuración/opción tls. Para procedimientos que usen los alias obsoletos ssl, consulta Usar opciones de línea de comandos (ssl).
Los ajustes/opciones de tls proporcionan una funcionalidad idéntica a las opciones de ssl ya que MongoDB siempre ha admitido TLS 1.0 y posteriores.
mongod --replSet <name> --tlsMode requireTLS --clusterAuthMode x509 --tlsClusterFile <path to membership certificate and key PEM file> --tlsCertificateKeyFile <path to TLS/SSL certificate and key file> --sslCAFile <path to root CA file> --bind_ip localhost,<hostname(s)|ip address(es)>
Importante
Para utilizar la autenticación X.509, se debe especificar --tlsCAFile o net.tls.CAFile, a menos que estés utilizando --tlsCertificateSelector o --net.tls.certificateSelector.
Incluya cualquier opción adicional, TLS/SSL o de otro tipo, que se requiera para su configuración específica. Para
security: clusterAuthMode: x509 net: tls: mode: requireTLS certificateKeyFile: <path to its TLS/SSL certificate and key file> CAFile: <path to root CA PEM file to verify received certificate> clusterFile: <path to its certificate key file for membership authentication> bindIp: localhost,<hostname(s)|ip address(es)>
Importante
Para utilizar la autenticación X.509, se debe especificar --tlsCAFile o net.tls.CAFile, a menos que estés utilizando --tlsCertificateSelector o --net.tls.certificateSelector.
Incluye cualquier opción adicional, ya sea TLS/SSL u otra, que sea necesaria para tu configuración específica.
Para obtener más información, consulta Configurar mongod y mongos para TLS/SSL.
Usa opciones de línea de comandos (ssl)
Nota
Los procedimientos en esta sección utilizan la configuración/opción obsoleta ssl. Para los procedimientos que utilizan alias de tls, consulte Usar opciones de línea de comandos (tls).
Los ajustes/opciones de tls proporcionan una funcionalidad idéntica a las opciones de ssl ya que MongoDB siempre ha admitido TLS 1.0 y posteriores.
Para especificar el certificado X.509 para la autenticación interna de nodos del clúster, añade las opciones TLS/SSL adicionales --clusterAuthMode y --sslClusterFile, como en el siguiente ejemplo para un nodo de un set de réplicas:
mongod --replSet <name> --sslMode requireSSL --clusterAuthMode x509 --sslClusterFile <path to membership certificate and key PEM file> --sslPEMKeyFile <path to TLS/SSL certificate and key PEM file> --sslCAFile <path to root CA PEM file> --bind_ip localhost,<hostname(s)|ip address(es)>
Importante
Para utilizar la autenticación X.509, se debe especificar --tlsCAFile o net.tls.CAFile, a menos que estés utilizando --tlsCertificateSelector o --net.tls.certificateSelector.
Incluye cualquier opción adicional, ya sea TLS/SSL u otra, que sea necesaria para tu configuración específica.
security: clusterAuthMode: x509 net: ssl: mode: requireSSL PEMKeyFile: <path to TLS/SSL certificate and key PEM file> CAFile: <path to root CA PEM file> clusterFile: <path to X.509 membership certificate and key PEM file> bindIp: localhost,<hostname(s)|ip address(es)>
Importante
Para utilizar la autenticación X.509, se debe especificar --tlsCAFile o net.tls.CAFile, a menos que estés utilizando --tlsCertificateSelector o --net.tls.certificateSelector.
Incluye cualquier opción adicional, ya sea TLS/SSL u otra, que sea necesaria para tu configuración específica.
Para obtener más información, consulta Configurar mongod y mongos para TLS/SSL.
Información Adicional
Para actualizar de la autenticación interna de keyfile a la autenticación interna de X.509, consulta Actualizar MongoDB autogestionado de autenticación Keyfile a autenticación X.509.
Para realizar una actualización gradual de los certificados a nuevos certificados con DN diferentes, consulte Actualización gradual de los certificados X.509 que contienen un nuevo nombre distinguido en clústeres autogestionados.