Configurar mongod
e mongos
para TLS/SSL
Nesta página
- Visão geral
- Pré-requisitos
- Autoridades de certificação
- Arquivo de chave de certificado
mongod
emongos
- Procedimentos (usando configurações
net.tls
) - Configurar o
mongod
emongos
com certificado TLS/SSL e chave - Configurar
mongod
emongos
com validação do certificado de cliente - Não permitir protocolos
- Senha do Certificado TLS/SSL
- Rotação de certificados online
- Executar no modo FIPS
- Próximos passos
- Procedimentos (usando configurações
net.ssl
) - Configurar o
mongod
emongos
com certificado TLS/SSL e chave - Configurar
mongod
emongos
com validação do certificado de cliente - Não permitir protocolos
- Senha do Certificado TLS/SSL
- Executar no modo FIPS
- Próximos passos
Visão geral
Este documento ajuda você a configurar uma nova instância do MongoDB para dar suporte a TLS/SSL. Para instruções sobre como fazer upgrade de um cluster que atualmente não usa TLS/SSL para passar a usar TLS/SSL, consulte Fazer upgrade de um cluster para usar TLS/SSL.
O MongoDB usa as bibliotecas de sistemas operacionais TLS/SSL nativas:
Plataforma | Biblioteca TLS/SSL |
---|---|
Windows | Secure Channel (Schannel) |
Linux/BSD | OpenSSL |
macOS | Secure Transport |
Observação
O MongoDB desabilita o suporte para criptografia TLS 1.0 em sistemas em que o TLS 1.1+ está disponível.
A criptografia TLS/SSL do MongoDB permite apenas o uso de cifras TLS/SSL fortes com um comprimento mínimo de chave de 128 bits para todas as conexões.
As construções do Linux de 64 bits legado x64 do MongoDB não incluem suporte para TLS/SSL.
Pré-requisitos
Importante
Uma descrição completa de certificados TLS/SSL, PKI (Public Key Infrastructure) e autoridade de certificação está além do escopo deste documento. Esta página pressupõe conhecimento prévio de TLS/SSL, bem como acesso a certificados válidos.
Autoridades 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.
mongod
e o arquivo de chave de certificado mongos
Ao estabelecer uma conexão TLS/SSL, o mongod
/ mongos
apresenta um arquivo de chave de certificado a seus clientes para estabelecer sua identidade. [1] O arquivo de chave de certificado contém um certificado de chave pública e sua chave privada associada, mas apenas o componente público é revelado ao cliente.
O MongoDB pode usar qualquer certificado TLS/SSL válido emitido por uma autoridade de certificação ou um certificado autoassinado. Se você usar um certificado autoassinado, embora o canal de comunicação seja criptografado para evitar a espionagem da conexão, não haverá validação da identidade do servidor. Isso deixa você vulnerável a um ataque man-in-the-middle. Usar um certificado assinado por uma autoridade certificadora confiável permitirá que drivers MongoDB verifiquem a identidade do servidor.
Em geral, evite utilizar certificados autoassinados a menos que a rede seja confiável.
Com relação aos certificados para membros de conjunto de réplicas e cluster fragmentado , é aconselhável usar certificados diferentes em servidores diferentes. Isso minimiza a exposição da chave privada e permite a validação do nome do host.
Observação
Se um MongoDB deployment não estiver configurado para usar um arquivo de AC, ele ignorará a validação do certificado do cliente.
[1] | Para o modo FIPS, verifique se o certificado é compatível com FIPS (ou seja, usa um algoritmo compatível com FIPS) e se a chave privada atende ao padrão PKCS#8. Se você precisar converter uma chave privada para o formato PKCS#8, existem várias ferramentas de conversão, como openssl pkcs8 e outras. |
Procedimentos (usando as configurações net.tls
)
Observação
O MongoDB apresenta configurações net.tls
(e opções de linha de comando --tls
) que correspondem às configurações net.ssl
(e opções de linha de comando --ssl
). As novas configurações tls
fornecem funcionalidade idêntica às configurações ssl
, já que o MongoDB sempre suportou o TLS 1.0 e mais tarde.
Os procedimentos nesta seção usam as configurações do net.tls
. Para procedimentos que usam o alias net.ssl
, consulte Procedimentos (Usando configurações net.ssl
).
Configurar o mongod
e o mongos
com chave e certificado TLS/SSL
A seção a seguir configura mongod
/ mongos
para usar conexões TLS/SSL. Com essas configurações de TLS/SSL, mongod
/ mongos
apresenta seu arquivo de chave de certificado ao cliente. No entanto, o mongod
/ mongos
não exige um arquivo de chave do certificado do cliente para verificar a identidade do cliente. Para exigir o arquivo de chave do certificado do cliente, consulte Configurar mongod
e mongos
com a validação do certificado do cliente em vez disso.
Observação
O procedimento usa as configurações net.tls
. Para procedimentos que usam as configurações net.ssl
, consulte Procedimentos (usando configurações net.ssl
).
Para usar conexões TLS/SSL, inclua as seguintes configurações TLS/SSL em seu mongod
/ mongos
arquivo de configuração das instâncias:
Contexto | Notas |
---|---|
Defina como Esta configuração restringe cada servidor a usar somente conexões criptografadas TLS/SSL. Você também pode especificar o valor | |
Por exemplo, considere o seguinte arquivo de configuração para uma instância mongod
:
net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Você pode usar armazenamentos de certificados SSL do sistema para Windows e macOS. Para usar o armazenamento de certificados SSL do sistema, especifique net.tls.certificateSelector
em vez de especificar o arquivo de chave do certificado.
Contexto | Notas |
---|---|
Defina como Esta configuração restringe cada servidor a usar somente conexões criptografadas TLS/SSL. Você também pode especificar o valor | |
Defina como a propriedade ( Esta configuração é usada para selecionar o certificado. Consulte |
Por exemplo, considere o seguinte arquivo de configuração para uma instância mongod
:
net: tls: mode: requireTLS certificateSelector: subject="<CertificateCommonName>" systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Uma instância mongod
que usa a configuração acima só pode aceitar conexões TLS/SSL:
mongod --config <path/to/configuration/file>
Consulte Conectar-se as instâncias do MongoDB usando criptografia para obter mais informações sobre como se conectar com TLS/SSL.
Dica
Veja também:
Você também pode configurar mongod
e mongos
usando opções de linha de comando em vez do arquivo de configuração:
Para
mongod
, consulte:--tlsMode
;--tlsCertificateKeyFile
; e--tlsCertificateSelector
.Para
mongos
, consulte:--tlsMode
;--tlsCertificateKeyFile
; e--tlsCertificateSelector
.
Configurar mongod
e mongos
com validação do certificado de cliente
A seção a seguir configura mongod
/ mongos
para usar conexões TLS/SSL e realizar a validação do certificado do cliente. Com estas configurações TLS/SSL:
mongod
/mongos
apresenta seu arquivo de chave de certificado para o cliente para verificação.mongod
/mongos
requer um arquivo de chave de certificado do cliente para verificar a identidade do cliente.
Observação
O procedimento usa as configurações net.tls
. Para procedimentos que usam as configurações net.ssl
, consulte Procedimentos (usando configurações net.ssl
).
Para usar conexões TLS/SSL e realizar a validação do certificado do cliente, inclua as seguintes configurações de TLS/SSL no mongod
mongos
arquivo de configuração da instância / :
Observação
Você pode usar armazenamentos de certificados SSL do sistema para Windows e macOS. Para usar o armazenamento de certificados SSL do sistema, especifique net.ssl.certificateSelector
em vez de especificar o arquivo de chave do certificado.
Contexto | Notas |
---|---|
Defina como Esta configuração restringe cada servidor a usar somente conexões criptografadas TLS/SSL. Você também pode especificar o valor | |
Defina como o caminho do arquivo que contém a cadeia de certificados para verificar certificados de cliente. A instância |
Importante
Ao iniciar uma instância do mongod
com TLS/SSL habilitado, você deve especificar um valor para o sinalizador --tlsCAFile
, a opção de configuração do net.tls.CAFile
ou o parâmetro tlsUseSystemCA
.
--tlsCAFile
, tls.CAFile
e tlsUseSystemCA
são mutuamente exclusivos.
Por exemplo, considere o seguinte arquivo de configuração para uma instância mongod
:
net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Uma instância mongod
que usa a configuração acima só pode aceitar conexões TLS/SSL e requer um certificado válido de seus clientes:
mongod --config <path/to/configuration/file>
Os clientes devem especificar conexões TLS/SSL e apresentar seu arquivo de chave de certificado à instância. Consulte Conectar-se a instâncias do MongoDB que exigem certificados de cliente para obter mais informações sobre como se conectar com TLS/SSL.
Dica
Veja também:
Você também pode configurar mongod
e mongos
usando opções de linha de comando em vez do arquivo de configuração:
Para
mongod
, consulte--tlsMode
,--tlsCertificateKeyFile
e--tlsCAFile
.Para
mongos
, consulte--tlsMode
,--tlsCertificateKeyFile
,--tlsCAFile
.
Bloquear certificados revogados para clientes
Observação
O procedimento usa as configurações net.tls
. Para procedimentos que usam as configurações net.ssl
, consulte Procedimentos (usando configurações net.ssl
).
Para impedir que clientes com certificados revogados se conectem à instância mongod
ou mongos
, você pode usar uma lista de revogação de certificados (CRL).
Para especificar um arquivoCRL do , inclua o net.tls.CRLFile
configurado para um arquivo que contém certificados revogados.
Por exemplo:
net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem CRLFile: /etc/ssl/revokedCertificates.pem
Os clientes que apresentam certificados listados no arquivo /etc/ssl/revokedCertificates.pem
não conseguem se conectar.
Dica
Veja também:
Você também pode configurar a lista de certificados revogados usando a opção de linha de comando.
Para
mongod
, consulte--tlsCRLFile
.Para
mongos
, consulte--tlsCRLFile
.
Validar somente se um cliente apresentar um certificado
Na maioria dos casos, é importante garantir que os clientes apresentem certificados válidos. No entanto, se você tiver clientes que não puderem apresentar um certificado de cliente ou estiverem fazendo a transição para o uso de um certificado, você só deverá validar certificados de clientes que apresentem um certificado.
Observação
O procedimento usa as configurações net.tls
. Para procedimentos que usam as configurações net.ssl
, consulte Procedimentos (usando configurações net.ssl
).
Para ignorar a validação de certificado de cliente para clientes que não apresentam um certificado, inclua net.tls.allowConnectionsWithoutCertificates
definido como true
.
Por exemplo:
net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem allowConnectionsWithoutCertificates: true
Um mongod
/ mongos
em execução com essas configurações permite a conexão de:
Clientes que não apresentam um certificado.
Clientes que apresentam um certificado válido.
Observação
Se o cliente apresentar um certificado, o certificado deverá ser um certificado válido.
Todas as conexões, incluindo aquelas que não apresentavam certificados, são criptografadas usando TLS/SSL.
Consulte Configuração TLS/SSL para clientes para obter mais informações sobre conexões TLS/SSL para clientes.
Dica
Veja também:
Você também pode configurar usando as opções de linha de comando:
Para
mongod
, consulte--tlsAllowConnectionsWithoutCertificates
.Para
mongos
, consulte--tlsAllowConnectionsWithoutCertificates
.
Não permitir protocolos
Observação
O procedimento usa as configurações net.tls
. Para procedimentos que usam as configurações net.ssl
, consulte Procedimentos (usando configurações net.ssl
).
Para evitar que os servidores MongoDB aceitem conexões de entrada que usam protocolos específicos, inclua net.tls.disabledProtocols
definido como os protocolos não permitidos.
Por exemplo, a configuração a seguir impede que mongod
/ mongos
aceite conexões recebidas que usem TLS1_0
ou TLS1_1
net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem disabledProtocols: TLS1_0,TLS1_1
Dica
Veja também:
Você também pode configurar usando as opções de linha de comando:
Para
mongod
, consulte--tlsDisabledProtocols
.Para
mongos
, consulte--tlsDisabledProtocols
.
Senha do Certificado TLS/SSL
Se os arquivos de chave de certificado para mongod
/ mongos
estiverem criptografados, inclua net.tls.certificateKeyFilePassword
definido como senha.
Dica
Para evitar inserir a senha em texto não criptografado, é possível usar um valor de expansão no arquivo de configuração.
Dica
Veja também:
Você também pode configurar usando as opções de linha de comando:
Para
mongod
, consulte--tlsCertificateKeyFilePassword
.Para
mongos
, consulte--tlsCertificateKeyFilePassword
.
Rotação de certificados online
A partir do MongoDB 5.0, você pode girar os seguintes arquivos de chave de certificado on-demand:
CRL (Certificate Revocation List) files
(em plataformas Linux e Windows)
Para rotacionar um ou mais desses certificados:
Substitua o certificado ou certificados que você deseja girar no sistema de arquivos, observando as seguintes restrições:
Cada novo certificado deve ter o mesmo nome de arquivo e o mesmo caminho de arquivo que o certificado que está substituindo.
Se estiver girando um
TLS Certificate
criptografado, sua senha deverá ser igual à senha do certificado antigo (conforme especificado na configuração do arquivo de configuraçãocertificateKeyFilePassword
). A rotação de certificados não oferece suporte ao prompt de senha interativo.
Conecte
mongosh
à instânciamongod
oumongos
na qual você deseja executar a rotação de certificado.Execute o comando
rotateCertificates
ou o método de shell dodb.rotateCertificates()
para rotacionar os certificados utilizados pela instância domongod
oumongos
.
Quando ocorre a rotação de certificados:
As conexões existentes à instância
mongod
oumongos
não são encerradas e continuarão usando os certificados antigos.Todas as novas conexões usarão os novos certificados.
Arquivos de certificados incorretos, expirados, revogados ou ausentes causarão falha na rotação de certificados, mas não invalidarão a configuração TLS existente nem encerrarão o processo mongod
ou mongos
em execução.
Antes do MongoDB 5.0, a rotação de certificados exigia tempo de inatividade e era normalmente realizada durante janelas de manutenção.
Consulte rotateCertificates
ou db.rotateCertificates()
para obter considerações adicionais e instruções de uso completas.
Executar no modo FIPS
Observação
O TLS/SSL compatível com FIPS está disponível apenas no MongoDB Enterprise. Consulte Configurar MongoDB para FIPS para obter mais informações.
Consulte Configurar MongoDB para FIPS para obter mais detalhes.
Próximos passos
Para configurar o suporte a TLS/SSL para clientes, consulte Configuração TLS/SSL para clientes.
Procedimentos (usando as configurações net.ssl
)
Observação
O MongoDB apresenta configurações net.tls
(e opções de linha de comando --tls
) que correspondem às configurações net.ssl
(e opções de linha de comando --ssl
). As novas configurações tls
fornecem funcionalidade idêntica às configurações ssl
, já que o MongoDB sempre suportou o TLS 1.0 e mais tarde.
Os procedimentos nesta seção usam as configurações do net.ssl
. Para procedimentos que usam os apelidos net.tls
, consulte Procedimentos (usando configurações net.tls
)..
Configurar o mongod
e o mongos
com chave e certificado TLS/SSL
A seção a seguir configura mongod
/ mongos
para usar conexões TLS/SSL. Com essas configurações de TLS/SSL, mongod
/ mongos
apresenta seu arquivo de chave de certificado ao cliente. No entanto, o mongod
/ mongos
não exige um arquivo de chave do certificado do cliente para verificar a identidade do cliente. Para exigir o arquivo de chave do certificado do cliente, consulte Configurar mongod
e mongos
com a validação do certificado do cliente em vez disso.
Para usar conexões TLS/SSL, inclua as seguintes configurações de TLS/SSL em seu arquivo de configuração da instância mongod
/ mongos
:
Contexto | Notas |
---|---|
| Defina como Esta configuração restringe cada servidor a usar somente conexões criptografadas TLS/SSL. Você também pode especificar |
|
Por exemplo, considere o seguinte arquivo de configuração para uma instância mongod
:
net: ssl: mode: requireSSL PEMKeyFile: /etc/ssl/mongodb.pem systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Você pode usar armazenamentos de certificados SSL do sistema para Windows e macOS. Para usar o armazenamento de certificados SSL do sistema, especifique net.ssl.certificateSelector
em vez de especificar o arquivo de chave do certificado.
Contexto | Notas |
---|---|
| Defina como Esta configuração restringe cada servidor a usar somente conexões criptografadas TLS/SSL. Você também pode especificar |
| Defina como a propriedade ( Esta configuração é usada para selecionar o certificado. Consulte |
Por exemplo, considere o seguinte arquivo de configuração para uma instância mongod
:
net: ssl: mode: requireSSL certificateSelector: subject="<CertificateCommonName>" systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Uma instância mongod
que usa a configuração acima só pode aceitar conexões TLS/SSL:
mongod --config <path/to/configuration/file>
Consulte Conectar-se as instâncias do MongoDB usando criptografia para obter mais informações sobre como se conectar com TLS/SSL.
Configurar mongod
e mongos
com validação do certificado de cliente
A seção a seguir configura mongod
/ mongos
para usar conexões TLS/SSL e realizar a validação do certificado do cliente. Com estas configurações TLS/SSL:
mongod
/mongos
apresenta seu arquivo de chave de certificado para o cliente para verificação.mongod
/mongos
requer um arquivo de chave de certificado do cliente para verificar a identidade do cliente.
Para usar conexões TLS/SSL, inclua as seguintes configurações de TLS/SSL em seu arquivo de configuração da instância mongod
/ mongos
:
Observação
Você pode usar armazenamentos de certificados SSL do sistema para Windows e macOS. Para usar o armazenamento de certificados SSL do sistema, especifique net.ssl.certificateSelector
em vez de especificar o arquivo de chave do certificado.
Contexto | Notas |
---|---|
| Defina como Esta configuração restringe cada servidor a usar somente conexões criptografadas TLS/SSL. Você também pode especificar |
| |
| Defina como o caminho do arquivo que contém a cadeia de certificados para verificar certificados de cliente. A instância |
Por exemplo, considere o seguinte arquivo de configuração para uma instância mongod
:
net: ssl: mode: requireSSL PEMKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true storage: dbPath: "/var/lib/mongodb" processManagement: fork: true net: bindIp: localhost,mongodb0.example.net port: 27017
Uma instância mongod
que usa a configuração acima só pode aceitar conexões TLS/SSL e requer um certificado válido de seus clientes:
mongod --config <path/to/configuration/file>
Os clientes devem especificar conexões TLS/SSL e apresentar seu arquivo de chave de certificado à instância. Consulte Conectar-se a instâncias do MongoDB que exigem certificados de cliente para obter mais informações sobre como se conectar com TLS/SSL.
Dica
Veja também:
Bloquear certificados revogados para clientes
Para impedir que clientes com certificados revogados se conectem à instância mongod
ou mongos
, você pode usar uma lista de revogação de certificados (CRL).
Para especificar um arquivo CRL, inclua net.ssl.CRLFile
configurado para um arquivo que contém certificados revogados.
Por exemplo:
net: ssl: mode: requireSSL PEMKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem CRLFile: /etc/ssl/revokedCertificates.pem
Os clientes que apresentam certificados listados no arquivo /etc/ssl/revokedCertificates.pem
não conseguem se conectar.
Validar somente se um cliente apresentar um certificado
Na maioria dos casos, é importante garantir que os clientes apresentem certificados válidos. No entanto, se você tiver clientes que não puderem apresentar um certificado de cliente ou estiverem fazendo a transição para o uso de um certificado, você só deverá validar certificados de clientes que apresentem um certificado.
Para ignorar a validação de certificado de cliente para clientes que não apresentam um certificado, inclua net.ssl.allowConnectionsWithoutCertificates
definido como true
.
Por exemplo:
net: ssl: mode: requireSSL PEMKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem allowConnectionsWithoutCertificates: true
Um mongod
/ mongos
em execução com essas configurações permite a conexão de:
Clientes que não apresentam um certificado.
Clientes que apresentam um certificado válido.
Observação
Se o cliente apresentar um certificado, o certificado deverá ser um certificado válido.
Todas as conexões, incluindo aquelas que não apresentavam certificados, são criptografadas usando TLS/SSL.
Consulte Configuração TLS/SSL para clientes para obter mais informações sobre conexões TLS/SSL para clientes.
Não permitir protocolos
Para evitar que os servidores do MongoDB aceitem conexões de entrada que usam protocolos específicos, inclua net.ssl.disabledProtocols
definido como os protocolos não permitidos.
Por exemplo, a configuração a seguir impede que mongod
/ mongos
aceite conexões recebidas que usem TLS1_0
ou TLS1_1
net: ssl: mode: requireSSL PEMKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/caToValidateClientCertificates.pem disabledProtocols: TLS1_0,TLS1_1
Senha do Certificado TLS/SSL
Se os arquivos de chave de certificado para mongod
/ mongos
estiverem criptografados, inclua net.ssl.PEMKeyPassword
definido como a senha.
Executar no modo FIPS
Observação
O TLS/SSL compatível com FIPS está disponível apenas no MongoDB Enterprise. Consulte Configurar MongoDB para FIPS para obter mais informações.
Consulte Configurar MongoDB para FIPS para obter mais detalhes.
Próximos passos
Para configurar o suporte a TLS/SSL para clientes, consulte Configuração TLS/SSL para clientes.