Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
X.509

Utilice certificados X.509 para autenticar clientes en implementaciones autogestionadas

El siguiente procedimiento configura la autenticación de certificados X.509 para la autenticación de clientes en un sistema autónomo. mongod instancia. Esto también se conoce como TLS Mutuo o mTLS.

Para usar la autenticación X.509 en conjuntos de réplicas o clústeres particionados, consulta Usar el certificado X.509 para autenticación de membresía con MongoDB autogestionado.

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.

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.

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.

Debe tener certificados X.509 válidos. Los certificados del cliente X.509 deben cumplir con los requisitos de certificados de cliente.

Si especificas --tlsAllowInvalidCertificates o net.tls.allowInvalidCertificates: true, un certificado no válido es suficiente solo para establecer una conexión TLS, pero es insuficiente para la autenticación.

1

Puedes configurar una instancia mongod para la autenticación X.509 desde la línea de comandos.

Para configurar una instancia autónomo de mongod, ejecute el siguiente comando:

mongod --tlsMode requireTLS \
--tlsCertificateKeyFile <path to TLS/SSL certificate and key PEM file> \
--tlsCAFile <path to root CA PEM file> --bind_ip <hostnames>

Incluye opciones adicionales según sea necesario para la configuración.

La configuración de X.509 requiere:

Opción
notas

Especifique requireTLS.

Especifique el certificado X.509 de la instancia que se presentará a los clientes.

Especifica el archivo de Autoridad de Certificación para verificar los certificados presentados a la instancia.

Puedes configurar un mongod para la autenticación de X.509 en el archivo de configuración.

Para configurar una instancia autónoma de mongod, agregue las siguientes opciones de configuración a su archivo de configuración:

net:
tls:
mode: requireTLS
certificateKeyFile: <path to TLS/SSL certificate and key PEM file>
CAFile: <path to root CA PEM file>

Incluye opciones adicionales según sea necesario para la configuración.

La configuración de X.509 requiere:

Opción
notas

Especifique requireTLS.

Especifique el certificado X.509 de la instancia que se presentará a los clientes.

Especifica el archivo de Autoridad de Certificación para verificar los certificados presentados a la instancia.

Para configurar la autenticación de X.509 en sets de réplicas o clústeres, consulte Usar el certificado X.509 para la autenticación de miembros con MongoDB autogestionado.

2

Para autenticarse con un certificado de cliente, primero debe agregar el valor del subject del certificado de cliente como usuario de MongoDB a la base de datos $external. Cada certificado de cliente X.509 único corresponde a un único usuario de MongoDB. No se puede usar un solo certificado de cliente para autenticar a más de un usuario de MongoDB.

Nota

Requisitos del nombre de usuario

  1. Puedes recuperar el RFC2253 formateado subject desde el certificado de cliente con el siguiente comando:

    openssl x509 -in <pathToClientPEM> -inform PEM -subject -nameopt RFC2253

    El comando devuelve la cadena subject y el certificado:

    subject= CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry
    -----BEGIN CERTIFICATE-----
    # ...
    -----END CERTIFICATE-----
  2. Añade el valor compatible con RFC2253 del subject como usuario. Omite los espacios según sea necesario.

    El siguiente ejemplo agrega un usuario y le otorga el rol de readWrite en la base de datos test y el rol de userAdminAnyDatabase:

    db.getSiblingDB("$external").runCommand(
    {
    createUser: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry",
    roles: [
    { role: "readWrite", db: "test" },
    { role: "userAdminAnyDatabase", db: "admin" }
    ],
    writeConcern: { w: "majority" , wtimeout: 5000 }
    }
    )

    Consulta Gestionar usuarios y roles en implementaciones autogestionadas para obtener detalles sobre cómo añadir un usuario con roles.

3

Después de que haya añadido el sujeto del certificado de cliente X.509 como un usuario correspondiente de MongoDB, puede autenticarse con el certificado de cliente:

Para autenticarse durante la conexión, ejecute el siguiente comando:

mongosh --tls --tlsCertificateKeyFile <path to client PEM file> \
--tlsCAFile <path to root CA PEM file> \
--authenticationDatabase '$external' \
--authenticationMechanism MONGODB-X509
Opción
notas

Especifique el archivo X.509 del cliente.

Especifique el archivo de la Autoridad Certificadora para verificar el certificado presentado por la instancia mongod.

Especifique '$external'.

Especifique MONGODB-X509.

Puedes conectarte sin autenticación y usar el método db.auth() para autenticarte después de la conexión.

Por ejemplo, si se usa mongosh,

  1. Conecta mongosh a mongod:

    mongosh --tls --tlsCertificateKeyFile <path to client PEM file> \
    --tlsCAFile <path to root CA PEM file>
    Opción
    notas

    Especifique el archivo X.509 del cliente.

    Especifica el archivo de la autoridad certificadora para verificar el certificado presentado por la instancia de mongod o mongos.

  2. Para autenticarse, usa el método db.auth() en la base de datos $external. En el campo mechanism, especifica "MONGODB-X509".

    db.getSiblingDB("$external").auth(
    {
    mechanism: "MONGODB-X509"
    }
    )

Para usar la autenticación X.509 en conjuntos de réplicas o clústeres particionados, consulta Usar el certificado X.509 para autenticación de membresía con MongoDB autogestionado.

Volver

X.509

En esta página