Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/

x.509

O MongoDB suporta autenticação de certificado X.509 para autenticação de cliente e autenticação interna dos membros de conjuntos de réplicas e clusters fragmentados.

A autenticação de certificado x.509 requer uma conexão TLS/SSL segura.

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 autenticar em servidores, os clientes podem usar certificados X.509 em vez de nomes de usuário e senhas.

Requisitos de certificado do cliente:

  • Uma única Autoridade de Certificação (CA) deve emitir os certificados para o cliente e para o servidor.

  • Cada usuário único do MongoDB deve ter um certificado exclusivo.

  • O certificado X.509 não pode expirar.

    Observação

  • Os certificados do cliente devem conter os seguintes campos:

    keyUsage = digitalSignature
    extendedKeyUsage = clientAuth
  • Pelo menos um dos seguintes atributos do certificado do cliente deve ser diferente dos atributos dos certificados do servidor net.tls.clusterFile e net.tls.certificateKeyFile:

    • Organização (O)

    • Unidade organizacional (OU)

    • Componente de domínio (DC)

    Observação

    Você também pode desabilitar o parâmetro enforceUserClusterSeparation durante a inicialização para desabilitar automaticamente a verificação do O/OU/DC . Isto permite que certificados de membro autentiquem-se como usuários armazenados no banco de banco de dados do $external .

  • O subject de um certificado de cliente x.509, que contém o nome diferenciado (DN), deve ser diferente dos subjects dos certificados de membro x.509 . Se a implantação do MongoDB tiver tlsX509ClusterAuthDNOverride definido, o assunto do certificado de cliente x.509 não deve corresponder a esse valor.

    Importante

    Se o assunto do certificado 509 de um cliente X corresponder aos atributos O, OU e DC do certificado de nó X.509 (ou tlsX509ClusterAuthDNOverride, se definido) exatamente, a conexão do cliente será aceita, permissões completas são concedidas e uma mensagem de aviso aparece no registro.

    Somente certificados x509 de membros do cluster devem usar as mesmas combinações de atributos O, OU e DC.

Para autenticar com um certificado de cliente, você deve primeiro adicionar o subject do certificado de cliente como um usuário do MongoDB no banco de dados $external. O banco de dados $external é o banco de dados de autenticação do usuário.

Cada certificado exclusivo de cliente X.509 é para um usuário MongoDB . Você não pode usar um único certificado de cliente para autenticar mais de um usuário do MongoDB .

Para usar Sessões de cliente e garantias de consistência causal 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.

A partir do MongoDB 5.0, mongod e mongos agora emitem um aviso de inicialização quando seus certificados não incluem um atributo Subject Alternative Name.

As seguintes plataformas não suportam validação de nome comum:

  • iOS 13 e superior

  • MacOS 10.15 e superior

  • Vá para 1,15 e superior

Os clientes que usam essas plataformas não se autenticarão em servidores MongoDB que usam certificados X.509 cujos nomes de host são especificados por atributos CommonName.

Para autenticação interna entre membros de clusters fragmentados e conjuntos de réplica, você pode utilizar certificados X.509 em vez de keyfiles.

Quando o TLS estiver ativado, use certificados de nó para verificar a associação a conexões internas em um cluster ou em um conjunto de réplicas. Você pode configurar os caminhos dos arquivos de certificado de nó com as opções net.tls.clusterFile e net.tls.certificateKeyFile. Os nós têm os seguintes requisitos de configuração:

  • A configuração do membro do cluster deve especificar um valor não vazio para pelo menos um dos atributos utilizados para autenticação. Por padrão, o MongoDB aceita:

    • a Organização (O)

    • a Unidade Organizacional (OU)

    • o componente de domínio (DC)

    O MongoDB verifica se as entradas correspondem exatamente em todos os certificados de membro. Se você listar vários valores de OU, todos os certificados deverão usar uma lista idêntica.

    Você pode especificar atributos alternativos para utilizar para autenticação configurando net.tls.clusterAuthX509.extensionValue.

  • A configuração do membro do cluster deve incluir o mesmo net.tls.clusterAuthX509.attributes e utilizar valores correspondentes. A ordem dos atributos não importa. O exemplo a seguir define O e OU, mas não DC:

    net:
    tls:
    clusterAuthX509:
    attributes: O=MongoDB, OU=MongoDB Server

Observação

Se você definir o parâmetro enforceUserClusterSeparation como false, os seguintes comportamentos se aplicarão:

  • Você não pode definir clusterAuthMode para uma opção que permita X.509 ou o servidor não iniciará. O servidor só iniciará se clusterAuthMode for keyFile.

  • Um cliente pode criar um usuário no banco de dados $external cujos atributos O/OU/DC correspondam aos atributos configurados do servidor para associação ao cluster.

  • Um cliente que apresenta um certificado de membro agora pode tentar a autenticação MONGODB-X509 como um usuário no banco de dados $external.

Para configurar o parâmetro enforceUserClusterSeparation para false, execute o seguinte comando durante a inicialização:

mongod --setParameter enforceUserClusterSeparation=false

Os certificados têm os seguintes requisitos:

  • Uma única CA (Certificate Authority, autoridade de certificação) deve emitir todos os certificados X.509 para os membros de um cluster fragmentado ou de um conjunto de réplicas.

  • Pelo menos uma das entradas de nome alternativo do assunto (SAN) deve corresponder ao nome de host do servidor usado por outros membros do cluster. Ao comparar SANs, o MongoDB pode comparar nomes DNS ou endereços IP.

    Se você não especificar subjectAltName, o MongoDB compara o nome comum (CN). No entanto, esse uso do CN está obsoleto de acordo com a RFC2818

  • Se o certificado utilizado como certificateKeyFile incluir extendedKeyUsage, o valor deverá incluir clientAuth ("Autenticação de cliente Web TLS") e serverAuth ("Autenticação de servidor Web TLS").

    extendedKeyUsage = clientAuth, serverAuth
  • Se o certificado utilizado como clusterFile incluir extendedKeyUsage, o valor deverá incluir clientAuth.

    extendedKeyUsage = clientAuth

Você pode usar TLS para autenticação interna entre cada membro do seu conjunto de réplicas (cada instância mongod) ou cluster fragmentado (cada instância mongod e mongos).

Para usar TLS para autenticação interna, use as seguintes configurações:

Importante

Se você definir --tlsMode como um valor diferente de disabled, o MongoDB usará o certificado especificado em net.tls.certificateKeyFile para a autenticação de servidor e cliente em conexões internas do conjunto de réplicas. Essa configuração de certificado se aplica independentemente da definição de security.clusterAuthMode como X.509.

As instâncias mongod e mongos usam seus arquivos de chave de certificado para provar sua identidade aos clientes, mas os arquivos de chave de certificado também podem ser usados para autenticação de associação. Se você não especificar um arquivo de cluster, os nós utilizarão seus arquivos de chave de certificado para autenticação de associação. Especifique o arquivo de chave de certificado com net.tls.certificateKeyFile ou --tlsCertificateKeyFile.

Para usar o arquivo de chave de certificado para autenticação de cliente e autenticação de associação, o certificado deve:

  • Omitir extendedKeyUsage ou

  • Especificar extendedKeyUsage = serverAuth, clientAuth

Voltar

Autenticar clientes

Nesta página