O MongoDB suporta autenticação de certificado x.509 para autenticação de clientes e autenticação interna dos nós de conjuntos de réplicas e clusters fragmentados.
A autenticação de certificado x.509 requer uma conexão TLS/SSL segura.
Autoridade de certificação
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.
Certificados de Cliente x.509
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
Os certificados do cliente devem ter as seguintes propriedades:
Uma única Autoridade de Certificação (CA) deve emitir os certificados para o cliente e para o servidor.
Os certificados do cliente devem conter os seguintes campos:
keyUsage = digitalSignature extendedKeyUsage = clientAuth Cada usuário único do MongoDB deve ter um certificado exclusivo.
Um cliente x. O assunto do certificado 509 , que contém o Nome Distinto (
DN), deve ser diferente dos assuntos do membro x.509 certificados.Importante
Se o assunto de um certificado x.509 do cliente corresponder aos atributos
O,OUeDCdo certificado x.509 do membro (outlsX509ClusterAuthDNOverride, se definido) exatamente, a conexão do cliente será aceita, todas as permissões serão concedidas e uma mensagem de aviso será exibida no registro.Somente certificados x509 de membros do cluster devem usar as mesmas combinações de atributos
O,OUeDC.Se a implementação do MongoDB tiver
tlsX509ClusterAuthDNOverridedefinido, o cliente x.509 o assunto do certificado não deve corresponder a esse valor.Se a implementação do MongoDB tiver
tlsX509ClusterAuthDNOverridedefinido, o cliente x.509 o assunto do certificado também deve ser diferente desse valor.O certificado x.509 não pode expirar.
O
mongod/mongosregistra um aviso na conexão se o certificado x.509 apresentado expirar dentro de30dias do horário do sistema hostmongod/mongos.
Usuário do MongoDB e $external banco de dados
Para autenticar com um certificado de cliente, você deve primeiro adicionar o valor do subject certificado de cliente como um usuário MongoDB. Cada x. O certificado de cliente 509 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 .
Adicione o usuário no banco de banco de dados do $external . O banco de dados $external é o banco de dados de dados de autenticação do usuário.
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.
Aviso de inicialização do certificado de conexão TLS X509
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 no MongoDB Server que usa o certificado X.509 cujos nomes de host são especificados pelos atributos CommonName.
Certificados de Nó x.509
Para autenticação interna entre nós de clusters fragmentados e conjuntos de réplica, você pode usar x.509 certificados em vez de keyfiles, que usam o mecanismo de autenticação SCRAM .
Requisitos de certificado de membro
Os certificados de membro que você usa para verificar a associação a um cluster fragmentado ou a um conjunto de réplicas (net.tls.clusterFile, se especificado, e net.tls.certificateKeyFile) devem ter as seguintes propriedades:
Uma única Autoridade de Certificação (CA) deve emitir todas as x.509 certificados para os membros de um cluster fragmentado ou de um conjunto de réplicas.
O nome diferenciado (
DN), encontrado no certificado de membrosubject, deve especificar um valor não vazio para pelo menos um dos seguintes atributos:a Organização (
O)a Unidade Organizacional (
OU)o componente de domínio (
DC)
Os atributos da Organização (
O's), os atributos da Unidade organizacional (OU's) e os componentes de domínio (DC's) devem corresponder aos dos certificadosnet.tls.clusterFileenet.tls.certificateKeyFilepara o outros membros do cluster (ou o valortlsX509ClusterAuthDNOverride, se definido).Para corresponder, o certificado deve corresponder a todas as especificações desses atributos, mesmo a não especificação desses atributos. A ordem dos atributos não importa.
No exemplo a seguir, os dois
DNcontêm especificações correspondentes paraO,OU, bem como a não especificação do atributoDC.CN=host1,OU=Dept1,O=MongoDB,ST=NY,C=US C=US, ST=CA, O=MongoDB, OU=Dept1, CN=host2 No entanto, os dois
DNa seguir contêm uma incompatibilidade para o atributoOU, pois um contém duas especificaçõesOUe o outro, apenas uma especificação.CN=host1,OU=Dept1,OU=Sales,O=MongoDB CN=host2,OU=Dept1,O=MongoDB Em sistemas de vários clusters, cada cluster deve usar um certificado de membro X.509 diferente. Cada certificado deve ter valores exclusivos nos campos
O,OUeDCCampos de nome distinto (DN).Se dois clusters tiverem certificados com os mesmos valores de DN, um servidor comprometido em um cluster poderá se autenticar como membro do outro.
As entradas Nome comum (
CN) ou uma das entradas nome alternativo do assunto (SAN) devem corresponder ao servidor para outros membros do cluster. A partir do MongoDB 4.2, ao compararSANs, o MongoDB pode comparar nomes DNS ou endereços IP. Nas versões anteriores, o MongoDB compara apenas os nomes DNS.Por exemplo, os certificados de um cluster podem ter os seguintes assuntos:
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 Se o certificado utilizado como
certificateKeyFileincluirextendedKeyUsage, o valor deverá incluirclientAuth("Autenticação de cliente Web TLS") eserverAuth("Autenticação de servidor Web TLS").extendedKeyUsage = clientAuth, serverAuth Se o certificado utilizado como
clusterFileincluirextendedKeyUsage, o valor deverá incluirclientAuth.extendedKeyUsage = clientAuth O certificado x.509 não pode expirar.
O
mongod/mongosregistra um aviso na conexão se o certificado x.509 apresentado expirar dentro de30dias do horário do sistema hostmongod/mongos.
Configuração do MongoDB para Autenticação de Membros
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:
security.clusterAuthModeou--clusterAuthModedefinido comox509
As instâncias mongod e mongos usam o arquivo de chave de certificado para provar sua identidade aos clientes, mas ele também pode ser usado 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 do certificado com net.tls.certificateKeyFile ou --tlsCertificateKeyFile.
Para usar o certificate key file para autenticação de cliente e autenticação de associação, o certificado deve:
Omitir
extendedKeyUsageouEspecificar
extendedKeyUsage = serverAuth, clientAuth