Habilitar TLS em uma conexão
Nesta página
- Visão geral
- Habilitar TLS
- Configurar certificados
- Certificados de referência em um cliente
- Crie um objeto SecureContext para armazenar certificados
- Forneça caminhos de arquivo de certificados
- Criar objetos de buffer para armazenar certificados
- Exemplo de SecureContext
- Informações adicionais
- Documentação da API
Visão geral
Neste guia, você verá como se conectar a instâncias do MongoDB com o protocolo de segurança TLS.
Para configurar sua conexão para usar TLS, habilite a opção TLS e forneça seus certificados para validação.
Dica
Para saber mais sobre o TLS, consulte o verbete da Wikipedia sobre Transport Layer Security.
Habilitar TLS
Você pode habilitar o TLS em uma conexão com sua instância MongoDB das seguintes maneiras:
Definindo a opção
tls
comotrue
no seu objetoMongoClientOptions
Definindo a opção
tls
paratrue
em sua connection string
Uma instância do MongoClient
pode se conectar ao TLS se você definir o tls
como true
em seu objeto MongoClientOptions
:
const client = new MongoClient(uri, { tls: true });
Uma instância MongoClient
pode se conectar ao TLS se você definir a opção tls
como true
em sua connection string:
const uri = "mongodb://<hostname>:<port>?tls=true"; const client = new MongoClient(uri, myClientSettings);
Observação
Se você usar um registro SRV DNS quando se conectar ao MongoDB especificando a modificação +srv
em sua string de conexão, você habilita o TLS na conexão por padrão. Para desativá-lo, defina o valor do parâmetro tls
ou ssl
como false
em sua string de conexão ou objeto MongoClientOptions
.
Para saber mais sobre o comportamento da conexão ao usar uma lista de sementes DNS, consulte a seção Formato de conexão SRV no manual do servidor.
Além da opção de cliente tls
, o driver proporciona mais opções para configurar o TLS em sua conexão. Para fins de teste, você pode definir as opções tlsAllowInvalidHostnames
, tlsAllowInvalidCertificates
e tlsInsecure
do cliente.
Definir a opção tlsAllowInvalidHostnames
como true
desabilita a verificação do nome do host, e definir o tlsAllowInvalidCertificates
como true
desabilita a validação do certificado. Definir a opção tlsInsecure
como true
desabilita a validação tanto do certificado quanto do nome do host.
Aviso
Ao especificar qualquer uma dessas opções em um ambiente de produção, seu aplicativo ficará desprotegido e potencialmente vulnerável a certificados expirados e a processos externos que se apresentam como instâncias de cliente válidas.
Para obter uma lista completa das opções de cliente , consulteOpções de conexão .
Configurar certificados
Para iniciar com êxito uma solicitação de TLS, um aplicativo deve provar sua identidade fazendo referência a certificados criptográficos. Para se conectar ao MongoDB com TLS, seus certificados devem estar armazenados como arquivos PEM.
Importante
Para uso em produção, recomendamos que sua implantação do MongoDB use certificados válidos gerados e assinados pela mesma autoridade de certificação. Para testar, você pode usar certificados autoassinados.
A lista abaixo descreve os componentes necessários para estabelecer uma conexão com o TLS:
Componente TLS | Descrição |
---|---|
Autoridade de certificação (CA) | Uma ou mais autoridades de certificação para confiar ao fazer uma conexão TLS. |
Certificado de cliente | Um certificado digital e uma chave que permitem que o servidor verifique a identidade do seu aplicativo para estabelecer uma conexão de rede criptografada. |
Chave de certificado | O arquivo de chave privada de certificado do cliente. Essa chave geralmente é incluída no próprio arquivo de certificado. |
Senha | A senha para descriptografar a chave de cliente privada se estiver criptografada. |
Dica
Para saber mais sobre o formato PEM, veja o Wikipedia sobre Privacy-Enhanced Mail.
Certificados de referência em um cliente
Você deve fazer referência aos seus certificados em seu objeto MongoClientOptions
para que o servidor possa validá-los antes que o cliente se conecte. Você pode fazer referência a seus certificados das seguintes maneiras:
Crie um objeto
SecureContext
para armazenar certificados (Recomendado)Forneça strings de caminho de arquivo que apontam para seus certificados
Criar objetos
Buffer
para armazenar certificados
Crie um objeto SecureContext para armazenar certificados
Recomendamos que você use a opção secureContext
para configurar sua conexão TLS. Objetos SecureContext
são nativos do Node.js e permitem que você mantenha todas as suas opções de TLS em um único objeto reutilizável.
Para criar um objeto SecureContext
, importe o método createSecureContext()
do módulo tls
. Em seguida, chame o método createSecureContext()
e passe o conteúdo dos seus certificados no parâmetro de opções. Este método gera um objeto SecureContext
que você pode usar no objeto MongoClientOptions
.
O seguinte código mostra como criar um objeto SecureContext
e transmiti-lo ao seu cliente:
// Create a SecureContext object const secureContext = tls.createSecureContext({ ca: fs.readFileSync(`<path to CA certificate>`), cert: fs.readFileSync(`<path to public client certificate>`), key: fs.readFileSync(`<path to private client key>`), }); // Pass the SecureContext as a client option const client = new MongoClient(uri, { tls: true, secureContext });
Para saber mais sobre o método createSecureContext()
e o pacote tls
, consulte a documentação da API TLS do Node.js.
Para um exemplo executável que utiliza um objeto SecureContext
, consulte o Exemplo de SecureContext.
Forneça caminhos de arquivo de certificados
Você pode incluir os caminhos de arquivo para seus certificados como opções de cliente para recuperar seus certificados durante a conexão com TLS. O driver lê esses arquivos quando você chama o método connect()
na sua instância do MongoClient
.
O código abaixo mostra como fornecer caminhos de arquivo de certificado como opções em seu MongoClient
:
// Pass filepaths as client options const client = new MongoClient(uri, { tls: true, tlsCAFile: `<path to CA certificate>`, tlsCertificateKeyFile: `<path to private client key>`, });
Observação
Arquivos CRL
Sua configuração TLS pode exigir que você apresente uma lista de revogação de certificado (CRL) ao se conectar ao MongoDB. A partir da versão 6.0 do driver, você pode passar o caminho de arquivo do seu arquivo CRL para a opção tlsCRLFile
na connection string ou na instância do MongoClientOptions
.
Criar objetos de buffer para armazenar certificados
Você pode passar o conteúdo dos seus arquivos de certificado como objetos Buffer
nas suas opções de cliente para se conectar ao TLS.
O seguinte código mostra como ler o conteúdo dos seus arquivos de certificado e passar os objetos Buffer
resultantes como opções em seu MongoClient
:
// Read file contents const ca = fs.readFileSync(`<path to CA certificate>`); const cert = fs.readFileSync(`<path to public client certificate>`); const key = fs.readFileSync(`<path to private client key>`); // Pass Buffers as client options const client = new MongoClient(uri, { tls: true, ca, cert, key });
Exemplo de SecureContext
Esse exemplo mostra como criar um objeto SecureContext
e uma instância MongoClient
que inclui opções TLS. O exemplo se conecta ao MongoDB e executa uma query de localização:
import { MongoClient } from "mongodb"; import * as fs from "fs"; import * as tls from "tls"; // Replace the uri string with your connection string. const uri = "<connection uri>"; // Replace the filepaths with your certificate filepaths. const secureContext = tls.createSecureContext({ ca: fs.readFileSync(`<path to CA certificate>`), cert: fs.readFileSync(`<path to public client certificate>`), key: fs.readFileSync(`<path to private client key>`), }); // Create a client with the secureContext option const client = new MongoClient(uri, { tls: true, secureContext }); async function run() { try { const db = client.db("myDB"); const myColl = db.collection("myColl"); const doc = await myColl.findOne({}); console.log(doc); } finally { await client.close(); } } run().catch(console.dir);
Informações adicionais
Para obter mais informações sobre como habilitar o TLS em uma conexão, consulte a seguinte documentação de manual do servidor: