Este tutorial le muestra cómo configurar TLS en un set de réplicas autogestionado. Seleccione un enfoque en función de si desea utilizar mTLS intraclúster, que es necesario para habilitar la autenticación X.509 entre nodos.
Importante
Estos pasos se aplican a implementaciones de MongoDB autogestionadas. Los clústeres de MongoDB Atlas utilizan TLS por defecto. Si utiliza Cloud Manager o MongoDB Ops Manager, configure TLS a través de su herramienta de gestión de implementación.
Antes de comenzar
Antes de empezar, verifique que tiene lo siguiente:
Un set de réplicas autogestionado en el que cada nodo tiene un nombre de host, como
localhostomongo0.example.com. Actualmente, TLS no está configurado en ningún nodo del set de réplicas.Certificados de servidor TLS para cada nodo que obtuvo siguiendo el tutorial Obtener certificados de servidor, como
mongo0.pem.Un certificado de CA para firmar los certificados del servidor, como
ca.pem.Acceso al archivo de configuración
mongoden cada nodo.Access to
mongosh.
Pasos
Siga este procedimiento si no necesita mTLS intraclúster o autenticación X.509 entre los nodos del servidor.
Crea un archivo de claves
Cada nodo utiliza el contenido de un archivo de claves para autenticar a otros nodos de la implementación. Cree un archivo de claves con el siguiente comando:
openssl rand -base64 756 > /etc/ssl/mongodb/keyfile chmod 400 /etc/ssl/mongodb/keyfile
Copia el archivo de claves a cada nodo de la implementación. Asegúrate de restringir los permisos en el archivo de claves para que solo el proceso mongod pueda leer el archivo.
Edite el archivo de configuración en cada nodo
En cada nodo, busca y abre el archivo de configuración mongod. Si el archivo no existe, créalo. Agrega las siguientes opciones de TLS. Utiliza rutas absolutas a los archivos de certificado.
Por ejemplo, el archivo de configuración de su nodo primario tiene el siguiente aspecto:
net: tls: mode: allowTLS certificateKeyFile: /etc/ssl/mongodb/mongo0.pem CAFile: /etc/ssl/mongodb/ca.pem allowConnectionsWithoutCertificates: true security: clusterAuthMode: keyFile keyFile: /etc/ssl/mongodb/keyfile setParameter: tlsWithholdClientCertificate: true
modeconfigurado enallowTLSacepta conexiones TLS, pero no las requiere, por lo que los nodos pueden completar un reinicio en secuencia sin interrumpir la replicación.certificateKeyFileespecifica el certificado del nodo. Reemplace el nombre de archivo con el archivo de clave de certificado para el nodo específico que está configurando.CAFileespecifica el certificado de CA que firmó el certificado del nodo.allowConnectionsWithoutCertificatespermite a los clientes conectarse sin proporcionar un certificado TLS.clusterAuthModeconfigurado enkeyFilepermite que los nodos se autentiquen mediante un archivo de claves.keyFileespecifica el archivo de claves que los nodos utilizan para autenticarse entre sí.tlsWithholdClientCertificateevita que el nodo presente su certificado de servidor al realizar conexiones salientes a otros nodos del clúster. Esto es necesario porque evita que los nodos utilicen certificados de autenticación de servidor para la autenticación de cliente, especialmente si sus certificados no incluyen el EKUclientAuth.
Reiniciar los nodos del set de réplicas
Reinicie el proceso mongod para aplicar la nueva configuración de TLS. Para aplicar la configuración sin tiempo de inactividad, reinicie los nodos de forma progresiva.
En cada host de la implementación, comenzando por los nodos secundarios y terminando por el nodo primario, ejecuta lo siguiente:
sudo systemctl restart mongod
Para verificar que el reinicio en secuencia se completó correctamente, ejecute el siguiente comando en cada host:
sudo systemctl status mongod
Actualizar la configuración para aplicar TLS
Después de que todos los nodos se reinicien correctamente con TLS habilitado, actualice el archivo de configuración en cada nodo. Cambie net.tls.mode de allowTLS a requireTLS para aplicar conexiones cifradas para todos los clientes y nodos:
net: tls: mode: requireTLS
Reiniciar los nodos del set de réplicas
Reinicie el proceso mongod para aplicar la nueva configuración de TLS. Para aplicar la configuración sin tiempo de inactividad, reinicie los nodos de forma progresiva.
En cada host de la implementación, comenzando por los nodos secundarios y terminando por el nodo primario, ejecuta lo siguiente:
sudo systemctl restart mongod
Para verificar que el reinicio en secuencia se completó correctamente, ejecute el siguiente comando en cada host:
sudo systemctl status mongod
Siga este procedimiento para configurar su set de réplicas para usar mTLS intraclúster y autenticación X.509 entre nodos.
Edite el archivo de configuración en cada nodo
Importante
Your node certificates must include both serverAuth and clientAuth EKU for intra-cluster mTLS. If your certificates do not include clientAuth, see the Public Certificate Authority Policy Changes Affecting mTLS Technical Advisory for alternative configuration options.
En cada nodo, busca y abre el archivo de configuración mongod. Si el archivo no existe, créalo. Agrega las siguientes opciones de TLS. Utiliza rutas absolutas a los archivos de certificado.
Por ejemplo, el archivo de configuración de su nodo primario tiene el siguiente aspecto:
net: tls: mode: allowTLS certificateKeyFile: /etc/ssl/mongodb/mongo0.pem CAFile: /etc/ssl/mongodb/ca.pem allowConnectionsWithoutCertificates: true clusterAuthX509: attributes: O=MongoDB security: clusterAuthMode: x509
modeconfigurado enallowTLSacepta conexiones TLS, pero no las requiere, por lo que los nodos pueden completar un reinicio en secuencia sin interrumpir la replicación.certificateKeyFileespecifica el certificado del nodo. Reemplace el nombre de archivo con el archivo de clave de certificado para el nodo específico que está configurando.CAFileespecifica el certificado de CA que firmó el certificado del nodo.allowConnectionsWithoutCertificatespermite a los clientes conectarse sin proporcionar un certificado TLS.net.tls.clusterAuthX509.attributesespecifica los atributos del certificado X.509 que identifican un nodo como nodo del clúster, en lugar de un cliente normal. Para conocer los atributos de certificado necesarios, consulte Certificado X.509 de nodo.clusterAuthModeconfigurado enx509permite que los nodos se autentiquen mediante certificados X.509.
Reiniciar los nodos del set de réplicas
Reinicie el proceso mongod para aplicar la nueva configuración de TLS. Para aplicar la configuración sin tiempo de inactividad, reinicie los nodos de forma progresiva.
En cada host de la implementación, comenzando por los nodos secundarios y terminando por el nodo primario, ejecuta lo siguiente:
sudo systemctl restart mongod
Para verificar que el reinicio en secuencia se completó correctamente, ejecute el siguiente comando en cada host:
sudo systemctl status mongod
Actualizar la configuración para aplicar TLS
Después de que todos los nodos se reinicien correctamente con TLS habilitado, actualice el archivo de configuración en cada nodo. Cambie net.tls.mode de allowTLS a requireTLS para aplicar conexiones cifradas para todos los clientes y nodos:
net: tls: mode: requireTLS
Reiniciar los nodos del set de réplicas
Reinicie el proceso mongod para aplicar la nueva configuración de TLS. Para aplicar la configuración sin tiempo de inactividad, reinicie los nodos de forma progresiva.
En cada host de la implementación, comenzando por los nodos secundarios y terminando por el nodo primario, ejecuta lo siguiente:
sudo systemctl restart mongod
Para verificar que el reinicio en secuencia se completó correctamente, ejecute el siguiente comando en cada host:
sudo systemctl status mongod
Inspeccionar registros para verificar la configuración de TLS
Una vez que se complete el reinicio en secuencia, inspeccione los registros de cada nodo para verificar que TLS esté configurado correctamente. Sus registros deben incluir el siguiente contenido para verificar que la autenticación mTLS y X.509 estén configuradas correctamente:
"msg":"Successfully authenticated", "attr": { "isClusterMember":true, "mechanism":"MONGODB-X509", "user":"CN=mongo1.example.com,O=MongoDB,L=New York City,ST=New-York,C=US" }
Debería ver un mensaje de registro similar para cada uno de los otros dos nodos de su set de réplicas. Por ejemplo, si consulta los registros en mongo0, debería ver mensajes similares a los anteriores para mongo1 y mongo2.
Próximos pasos
Para aprender a conectarse a su implementación con una aplicación cliente, continúe con Conectarse a un set de réplicas habilitado para TLS.