Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / /

Desenvolvendo o MongoDB localmente com TLS

O MongoDB Atlas fornece certificados TLS válidos para ambientes de desenvolvimento, mas talvez seja necessário implementar um sistema local com configurações de segurança personalizadas. Este guia fornece instruções para configurar a criptografia TLS para uma implantação local do MongoDB , permitindo criar um ambiente de teste seguro que se assemelha à infraestrutura de produção.

Usar o Community Edition ou Enterprise MongoDB localmente com criptografia TLS fornece um ambiente realista para desenvolvimento, teste e validação dos comportamentos de segurança do seu aplicativo antes da implantação.

Em ambientes de produção, os servidores MongoDB usam certificados assinados por autoridades de certificação confiáveis, ou CAs. Para desenvolvimento local, você pode usar qualquer uma das seguintes opções:

  • Certificados CA comerciais ou públicos: se você registrou um nome de domínio, poderá obter um certificado de uma autoridade de certificação reconhecida.

  • Certificados de CA empresariais: se a sua organização mantém uma autoridade de certificação privada como EJBCA ou MinyCert, você pode solicitar certificados através do seu departamento de T.I.

  • Certificados CA gratuitos: se você tiver um nome de domínio registrado, serviços como o Let's Encrypt fornecem certificados assinados por autoridades de certificação gratuitos.

  • Certificados autoassinados: para ambientes de desenvolvimento local isolados, as cadeias de certificados autoassinados fornecem uma solução prática quando outras opções não estão disponíveis.

Você pode implementar a cadeia de certificados autoassinados para sistemas locais do MongoDB usando as etapas a seguir. Ao criar sua própria autoridade de certificação e certificados de servidor , você pode simular conexões criptografadas por TLS sem a necessidade de serviços externos.

Importante

Use somente cadeias de certificados autoassinadas em ambientes de desenvolvimento isolados. As cadeias de certificados autoassinadas não contêm os mecanismos de verificação de confiança de certificados emitidos corretamente e podem apresentar vulnerabilidades de segurança. Nunca use certificados autoassinados em produção ou ao trabalhar com dados confidenciais.

Em comunicações seguras, os certificados de servidor comprovam a identidade do servidor para conectar clientes, evitando ataques man-in-the-middle e facilitam a troca segura de chaves para comunicações criptografadas.

Em um handshake TLS típico, o cliente verifica o certificado do servidor verificando se:

  • O certificado é assinado por uma autoridade de certificação confiável

  • O certificado é válido, não expirou ou revogou

  • O nome do servidor no certificado corresponde ao servidor ao qual está sendo conectado

O cliente aceita certificados CA raiz e intermediário somente se eles estiverem presentes no armazenamento confiável local do cliente. Para certificados emitidos corretamente, somente a autoridade emitida pode acessar a chave privada do certificado raiz, nunca com o servidor.

Para sua configuração local do TLS do MongoDB com certificados autoassinados, você precisa criar e gerenciar vários arquivos de certificado que atendam a diferentes finalidades no handshake do TLS.

Requisitos do servidor:

  • Um certificado de autoridade de certificação (CA) autoassinado, que atua como sua própria raiz confiável.

  • A chave privada do certificado CA autoassinado, que é usado para assinar certificados de servidor .

  • Um certificado de servidor assinado por sua CA autoassinada, que identifica seu servidor MongoDB .

  • A chave privada do certificado do servidor , que é usada para criptografia TLS.

Requisitos do Cliente:

  • O certificado CA raiz autoassinado, necessário para verificar o certificado do servidor.

  • Certificados de cliente e suas chaves privadas, que são opcionais e usadas para TLS mútuo.

Ao configurar o MongoDB, especifique caminhos para esses arquivos de certificado nas configurações do servidor e do cliente para estabelecer conexões TLS seguras.

Importante

Em um ambiente de produção com certificados de uma CA reconhecida, você não tem acesso à chave privada da autoridade de certificação raiz. Esta é uma exceção especial para cadeias de certificados autoassinadas em ambientes de desenvolvimento.

O código a seguir usa a ferramenta de linha de comando openssl para criar uma cadeia completa de certificados autoassinados para seu sistema do MongoDB . Este processo cria todos os certificados e chaves necessários, formatados para uso com o MongoDB.

# Creating self-signed CA cert and SAN cert for localhost
# aka mdbinstance.mydevelopment.net
#=====================================================================================
openssl req -x509 -nodes -sha256 -days 1825 -newkey rsa:4096 \
-keyout rootCA.key -out rootCA.crt -subj="/CN=ca.mydevelopment.net"
openssl req -newkey rsa:4096 -keyout server.key -nodes \
-out domain.csr -subj "/CN=server.mydevelopment.net"
openssl req -x509 -nodes -CA rootCA.crt -CAkey rootCA.key -in domain.csr \
-out mdbinstance.mydevelopment.net.crt -days 3560 -nodes \
-subj '/CN=<mdbinstance_mydevelopment_net>' -extensions san -config <( \
echo '[req]'; \
echo 'distinguished_name=req'; \
echo '[san]'; \
echo 'subjectAltName=DNS:localhost,DNS:mdbinstance.mydevelopment.net')
cat rootCA.key rootCA.crt >rootCAcombined.pem
cat server.key mdbinstance.mydevelopment.net.crt >serverCert.pem

Os comandos anteriores executam as seguintes ações:

  1. Cria um certificado CA raiz, rootCA.crt, e sua chave privada, rootCA.key

  2. Gera uma solicitação de assinatura de certificado, ou um CSR, para seu servidor

  3. Cria um certificado de servidor com Nomes Alternativos do Assunto, ou SANs, para localhost e mdbinstance.mydevelopment.net

  4. Combina os certificados e chaves nos arquivos PEM necessários para MongoDB

Os comandos acima produzem os seguintes arquivos.

Para configuração do MongoDB Server :

  • rootCAcombined.pem: Certificado CA e chave privada combinados

  • serverCert.pem: Certificado de servidor e chave privada combinados

Para aplicativos do cliente:

  • rootCA.crt: O certificado CA, usado para confiar no certificado do servidor

  • serverCert.pem: O certificado do servidor com sua chave privada, usado para conexão TLS

Após gerar seus certificados, configure seu servidor MongoDB para utilizá-los. A configuração abaixo mostra a seção net do arquivo mongod.conf, com foco nas configurações do TLS.

# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Binds to all network interfaces - use only in secure networks
tls:
mode: requireTLS # Forces all connections to use TLS
certificateKeyFile: /path/to/serverCert.pem # Server certificate with private key
CAFile: /path/to/rootCAcombined.pem # CA certificate with private key

A configuração acima inclui:

  • port: Porta MongoDB padrão 27017

  • bindIp: defina como 0.0.0.0 para permitir conexões de qualquer endereço IP, apropriado somente para ambientes de desenvolvimento em redes privadas seguras

  • tls.mode: defina como requireTLS para garantir que todas as conexões usem criptografia TLS

  • certificateKeyFile: Caminho para o certificado do servidor com sua chave privada

  • CAFile: Caminho para o certificado da CA com sua chave privada

Depois de atualizar o arquivo de configuração, reinicie seu servidor MongoDB para aplicar as configurações do TLS. Sua instância do MongoDB exige TLS para todas as conexões.

Os exemplos a seguir demonstram como estabelecer conexões com seu servidor MongoDB configurado para TLS.

mongosh --tls --tlsCAFile /path/to/rootCA.crt --tlsCertificateKeyFile \
/path/to/serverCert.pem 'mongodb://userid:password@hostname.domain'

Para conexões do MongoDB Compass , URL os caminhos do certificado em sua string de conexão. Por exemplo, converta barras (/) em %2F:

mongodb://userid:password@hostname.domain/?directConnection=true&tls=true&tlsCAFile=%2Fpath%2Fto%2FrootCA.crt&tlsCertificateKeyFile=%2Fpath%2Fto%2Fserver_certificate.pem
$mongodb_client = new MongoDB\Client($mongodb_uri,
[
'tls' => true, # Enable TLS for the connection
'tlsCAFile' => $mongodb_ca_cert_path, # Path to your CA certificate
'tlsCertificateKeyFile' => $mongodb_cert_path # Path to your client certificate
]
);

Para todos os clientes, você precisa fornecer:

  1. A opção de habilitar o TLS

  2. O caminho para o certificado da CA para confiar no servidor

  3. Opcionalmente, para TLS mútuo, o caminho para um certificado de cliente

Testar sua conexão confirma se a configuração do TLS está funcionando corretamente. Se a conexão for bem-sucedida, sua implantação do MongoDB estará protegida com criptografia TLS.

Embora os certificados autoassinados funcionem para desenvolvimento, os ambientes de produção devem usar certificados de autoridades de certificação confiáveis. Se você tiver um nome de domínio registrado, o Let's Encrypt oferece certificados gratuitos que são amplamente confiáveis.

Ao usar certificados de CAs reconhecidas, certifique-se de que os certificados raiz e intermediários da CAs façam parte do armazenamento confiável do sistema operacional no servidor e nos clientes.

Em implantações de produção com certificados confiáveis, defina as configurações do servidor MongoDB usando o seguinte código:

net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem # Your trusted certificate with private key

Na configuração anterior, o mongodb.pem contém o certificado do seu servidor, assinado por um CA confiável e sua chave privada. Como a CA já é confiável pelo sistema operacional, você não precisa especificar o parâmetro CAFile.

Para obter mais detalhes sobre como configurar o MongoDB com certificados confiáveis, consulte Configurar mongod e mongos para TLS/SSL.

Voltar

Configurar mongod e mongos

Nesta página