Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Use x.509 Certificados para autenticar clientes em implementações autogerenciadas

Nesta página

  • Pré-requisitos
  • Procedimento
  • Próximos passos

O procedimento a seguir define x.509 autenticação de certificado para autenticação de cliente em uma instância autônomo mongod . Isso também é conhecido como TLS Mutual ou mTLS.

Para usar a autenticação x.509 para conjuntos de réplicas ou clusters fragmentados, consulte Usar o certificado x.509 para autenticação de associação com o MongoDB autogerenciado.

Uma descrição completa dos certificados TLS/SSL, PKI (Public Key Infrastructure), em particular os certificados x.509, e da autoridade de certificação está além do escopo deste documento. Este tutorial pressupõe conhecimento prévio de TLS/SSL, bem como acesso a certificados x.509 válidos.

Para uso em produção, seu MongoDB deployment deve usar certificados válidos gerados e assinados por uma autoridade de certificação. Você ou sua organização podem gerar e manter uma autoridade de certificação independente ou usar certificados gerados por fornecedores de TLS de terceiros. Obter e gerenciar certificados está além do escopo desta documentação.

Para usar a autenticação x.509, --tlsCAFile ou net.tls.CAFile deve-se especificar a menos que você esteja usando --tlsCertificateSelector ou --net.tls.certificateSelector.

Você deve ter certificados x.509 válidos. Os certificados x.509 do cliente devem atender aos requisitos de certificado do cliente.

Se você especificar --tlsAllowInvalidCertificates ou net.tls.allowInvalidCertificates: true, um certificado inválido será suficiente apenas para estabelecer uma conexão TLS, mas será insuficiente para autenticação.

1

Você pode configurar uma instância mongod para autenticação x.509 na linha de comando.

Para configurar uma instância standalone do mongod, execute o seguinte comando:

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

Inclua opções adicionais, conforme necessário, para sua configuração.

A configuração x.509 exige:

Opção
Notas
Especifique requireTLS.
Especifique o certificado x.509 da instância para apresentar aos clientes.
Especifique o arquivo da autoridade de certificação para verificar os certificados apresentados à instância.

Você pode configurar um mongod para autenticação x.509 no arquivo de configuração.

Para configurar uma instância mongod autônoma, adicione as seguintes opções de configuração ao seu arquivo de configuração:

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

Inclua opções adicionais, conforme necessário, para sua configuração.

A configuração x.509 exige:

Opção
Notas
Especifique requireTLS.
Especifique o certificado x.509 da instância para apresentar aos clientes.
Especifique o arquivo da autoridade de certificação para verificar os certificados apresentados à instância.

Para configurar a autenticação x.509 para conjuntos de réplicas ou clusters fragmentados, consulte Usar certificado x.509 para autenticação de associação com o MongoDB autogerenciado.

2

Para autenticar com um certificado de cliente, você deve primeiro adicionar o valor do subject do certificado de cliente como um usuário do MongoDB ao banco de dados do $external. Cada certificado de cliente x.509 exclusivo corresponde a um único usuário do MongoDB. Você não pode usar um único certificado de cliente para autenticar mais de um usuário do MongoDB .

Observação

Requisitos do nome de usuário

  • Para usar Client Sessions e Causal Consistency Guarantees com usuários de autenticação $external (usuários Kerberos, LDAP ou x.509), os nomes de usuário não podem ter mais de 10k bytes.

  • Os RDNs na subject string devem ser compatíveis com RFC2253 padrão.

  1. Você pode recuperar o RFC2253 formatado subject do certificado do cliente com o seguinte comando:

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

    O comando retorna a string subject e o certificado:

    subject= CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry
    -----BEGIN CERTIFICATE-----
    # ...
    -----END CERTIFICATE-----
  2. Adicione o valor compatível com RFC2253 do subject como usuário. Omita espaços conforme necessário.

    O exemplo a seguir adiciona um usuário e concede a ele a role readWrite no banco de dados test e a role 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 }
    }
    )

    Consulte Gerenciar usuários e funções em implantações autogerenciadas para obter detalhes sobre como adicionar um usuário com funções.

3

Após adicionar o assunto do certificado de cliente x.509 como um usuário MongoDB correspondente, você pode autenticar com o certificado de cliente:

Para autenticar durante a conexão, execute o seguinte comando:

mongosh --tls --tlsCertificateKeyFile <path to client PEM file> \
--tlsCAFile <path to root CA PEM file> \
--authenticationDatabase '$external' \
--authenticationMechanism MONGODB-X509
Opção
Notas
Especifique o arquivo x.509 do cliente.
Especifique o arquivo da autoridade de certificação para verificar o certificado apresentado pela instância mongod.
Especifique '$external'.
Especifique MONGODB-X509.

Você pode se conectar sem autenticação e usar o método db.auth() para autenticar após a conexão.

Por exemplo, se estiver usando mongosh,

  1. Conecte mongosh ao mongod:

    mongosh --tls --tlsCertificateKeyFile <path to client PEM file> \
    --tlsCAFile <path to root CA PEM file>
    Opção
    Notas
    Especifique o arquivo x.509 do cliente.
    Especifique o arquivo da autoridade de certificação para verificar o certificado apresentado pela instância mongod ou mongos.
  2. Para autenticar, use o método db.auth() no banco de dados $external. Para o campo mechanism, especifique "MONGODB-X509".

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

Para usar a autenticação x.509 para conjuntos de réplicas ou clusters fragmentados, consulte Usar o certificado x.509 para autenticação de associação com o MongoDB autogerenciado.

Voltar

x.509