Use x.509 Certificados para autenticar clientes em implementações autogerenciadas
Nesta página
O procedimento a seguir define x.509 autenticação de certificado para autenticação de cliente em uma instância mongod
autônomo . 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.
Pré-requisitos
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.
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.
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
.
Certificado de cliente x.509
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.
Procedimento
Distribuir com autenticação x.509
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.
Adicione x.509 Certificado subject
como usuário
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.
Você pode recuperar o
RFC2253
formatadosubject
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----- Adicione o valor compatível com
RFC2253
dosubject
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 dadostest
e a roleuserAdminAnyDatabase
: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.
Autenticar com um Certificado x.509
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
,
mongosh --tls --tlsCertificateKeyFile <path to client PEM file> \ --tlsCAFile <path to root CA PEM file> OpçãoNotasEspecifique o arquivo x.509 do cliente.Para autenticar, use o método
db.auth()
no banco de dados$external
. Para o campomechanism
, especifique"MONGODB-X509"
.db.getSiblingDB("$external").auth( { mechanism: "MONGODB-X509" } )
Próximos passos
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.