Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Configurar o TLS (Transport Layer Security)

Neste guia, você aprenderá a usar o protocolo TLS para proteger sua conexão com o MongoDB deployment.

Quando você habilita o TLS para uma conexão, o driver C executa as seguintes ações:

  • Usa TLS para se conectar ao MongoDB deployment

  • Verifica o certificado do sistema

  • Garante que o certificado certifique o sistema

Para saber como configurar seu sistema MongoDB para TLS, consulte o guia de configuração TLS no manual do MongoDB Server .

Observação

Uma descrição completa de certificados TLS/SSL, PKI (Public Key Infrastructure) e Autoridades de Certificação (CAs) está além do escopo deste documento. Esta página pressupõe conhecimento prévio de TLS/SSL e acesso a certificados válidos.

Você pode habilitar o TLS em uma conexão com sua instância MongoDB das seguintes maneiras:

  • Definindo o parâmetro tls em sua string de conexão

  • Usando a função mongoc_uri_set_option_as_bool() para definir a opção de conexão MONGOC_URI_TLS como true

mongoc_client_t *client = mongoc_client_new("mongodb+srv://<db_username>:<db_password>@<hostname>/?tls=true");
// Do database work here
mongoc_client_destroy(client);
mongoc_uri_t *uri = mongoc_uri_new("mongodb://localhost:27017");
mongoc_uri_set_option_as_bool(uri, MONGOC_URI_TLS, true);
mongoc_client_t *client = mongoc_client_new_from_uri(uri);
// Do database work here
mongoc_client_destroy(client);
mongoc_uri_destroy(uri);

Dica

Se a string de conexão incluir a modificação +srv , que especifica o formato de conexão SRV, o TLS será habilitado na sua conexão por padrão.

Para saber mais sobre o formato de conexão SRV, consulte Formato de conexão SRV na documentação do MongoDB Server .

Quando você se conecta a uma implementação do MongoDB com o TLS ativado, a implementação, por padrão, exigirá que o cliente forneça um certificado de cliente emitido por uma autoridade de certificação ou uma autoridade confiável pelo armazenamento de certificados nativo em uso no servidor.

Você pode fornecer o certificado do cliente das seguintes maneiras:

  • Definindo o parâmetro tlsCertificateKeyFile em sua string de conexão para um arquivo .pem contendo a cadeia de certificado raiz

  • Usando a função mongoc_uri_set_option_as_utf8() para definir a opção MONGOC_URI_TLSCERTIFICATEKEYFILE para um arquivo .pem contendo a cadeia de certificado raiz

mongoc_client_t *client = mongoc_client_new("mongodb+srv://<db_username>:<db_password>@<hostname>/?tls=true&tlscertificatekeyfile=/path/to/certs/client-certificate.pem");
// Do database work here
mongoc_client_destroy(client);
mongoc_uri_t *uri = mongoc_uri_new("mongodb://localhost:27017");
mongoc_uri_set_option_as_bool(uri, MONGOC_URI_TLS, true);
mongoc_uri_set_option_as_utf8(uri, MONGOC_URI_TLSCERTIFICATEKEYFILE, "/path/to/client-certificate.pem");
mongoc_client_t *client = mongoc_client_new_from_uri(uri);
// Do database work here
mongoc_client_destroy(client);
mongoc_uri_destroy(uri);

O driver C do MongoDB verificará automaticamente a validade de um certificado de servidor emitido pela Autoridade de Certificação configurada. O driver também realiza validação do nome do host e verificação de revogação.

Para substituir esse comportamento, é possível desabilitar a validação do nome de host, a verificação de revogação de endpoints OCSP, todas as verificações de revogação e permitir certificados inválidos.

Esse comportamento é controlado usando as opções tlsAllowInvalidHostnames, tlsDisableOCSPEndpointCheck, tlsDisableCertificateRevocationCheck e tlsAllowInvalidCertificates. Por padrão, todos estão configurados para false.

Não é recomendável alterar esses padrões, pois você pode expor seu cliente aos seguintes riscos de segurança:

  • Man In The Middle attacks, when tlsAllowInvalidHostnames is set

  • Certificados inválidos, quando tlsAllowInvalidCertificates está definido

  • Certificados potencialmente revogados, quando tlsDisableOCSPEndpointCheck ou tlsDisableCertificateRevocationCheck estão definidos

Observação

Depreciação do OCSP Let's Encrypt

Let's Encrypt has ended OCSP support for newer certificates. New certificates issued by Let's Encrypt might not include an OCSP responder URL. OCSP revocation checking occurs only when a certificate contains an OCSP URI, so a missing OCSP URL is expected and doesn't necessarily indicate a problem with your MongoDB deployment.

Por padrão, a libmongoc tentará encontrar uma biblioteca TLS compatível e ativar o suporte TLS. Isso é controlado pelo sinalizador cmake ENABLE_SSL, que é definido como AUTO por padrão. Este sinalizador aceita os seguintes valores:

  • AUTO: links para a biblioteca TLS nativa do sistema ou tentativas de encontrar OpenSSL. Este é o valor padrão.

  • OPENSSL: Links para OpenSSL (libssl). Um caminho de instalação opcional pode ser especificado com OPENSSL_ROOT.

  • WINDOWS: Links para Secure Channel, a biblioteca TLS nativa no Windows.

  • DARWIN: Links para Secure Transport, a biblioteca TLS nativa no macOS.

  • OFF: desabilita o suporte ao TLS.

O MongoDB C Driver usa OpenSSL em plataformas Linux e Unix (além do macOS). As melhores práticas do setor e alguns regulamentos exigem o uso do TLS 1.1 ou mais recente, que exige pelo menos OpenSSL 1.0.1. Use o seguinte comando para verificar sua versão do OpenSSL:

openssl version

Verifique se o OpenSSL do seu sistema é uma versão recente (pelo menos 1.0.1) ou use o comando a seguir para instalar uma versão recente em um caminho que não seja do sistema e construir com base nele:

cmake -DOPENSSL_ROOT_DIR=/absolute/path/to/openssl

When compiled against OpenSSL, the driver will attempt to load the system default certificate store, as configured by the distribution. That can be overridden by setting the tlsCAFile URI option or with the fields ca_file and ca_dir in the mongoc_ssl_opt_t.

O protocolo de status do certificado online (OCSP) é totalmente suportado ao usar o OpenSSL 1.0.1+. No entanto, quando um crl_file é definido com mongoc_ssl_opt_t e o crl_file revoga o certificado do servidor, o certificado é considerado revogado, mesmo que o certificado tenha uma resposta OCSP grampeada válida.

Dica

Para obter mais informações sobre OCSP, consulte RFC.6960

O MongoDB C Driver suporta a biblioteca TLS nativa do Windows (Secure Channel, ou SChannel) e sua biblioteca de criptografia nativa (Cryptografia API: Next Geração, ou CNG).

When compiled against the Windows native libraries, the ca_dir option of a mongoc_ssl_opt_t is not supported and issues an error if used. Encrypted PEM files, set by using the tlsCertificateKeyPassword URI option, are also not supported and issue errors when you attempt to load them.

A opção tlsCertificateKeyFile URI pode referir-se a um certificado codificado no formato PKCS#8 ou PKCS#1. A partir da versão 2.1.0 do driver C, o driver importa a chave privada como uma chave persistente para dar suporte a algoritmos de assinatura modernos. Nas versões anteriores, o driver importava a chave como efêmera. Para saber mais sobre como gerenciar chaves importadas, consulte Gerenciar chaves importadas.

Quando tlsCAFile está definido, o driver importa o arquivo de autoridade de certificação para o armazenamento de certificados System Local Machine Root. Quando nenhum tlsCAFile está definido, o driver procura o arquivo da autoridade de certificação usando o armazenamento de certificados System Local Machine Root para confirmar o certificado fornecido.

When crl_file is set with mongoc_ssl_opt_t, the driver imports the revocation list to the System Local Machine Root certificate store. Setting tlsDisableOCSPEndpointCheck has no effect.

O Protocolo de Status do Certificado Online (OCSP) é parcialmente suportado com as seguintes notas:

  • A extensão Must-Staple (consulte RFC 7633) é ignorada.

  • A conexão continuará se um certificado Must-Staple for apresentado sem uma resposta grampeada e o respondente OCSP estiver inativo.

  • A conexão não continuará se o cliente receber uma resposta revogada de um respondente do OCSP.

  • When a crl_file is set with mongoc_ssl_opt_t, and the crl_file revokes the server's certificate, the OCSP response takes precedence. For example, if the server presents a certificate with a valid stapled OCSP response, the certificate is considered valid even if the crl_file marks it as revoked.

Dica

For more information about OCSP, see RFC 6960.

O Driver C importa chaves PKCS#8 para o CNG KSP: Microsoft Software Key Storage Provider e importa chaves PKCS#1 para o CSP CryptoAPI legado : Microsoft Enhanced Cryptographic Provider v1.0. Para saber mais sobre as importações de chaves, consulte Armazenamento e recuperação de chaves na documentação da Microsoft.

Depois de importar chaves, talvez seja necessário calcular o nome e o fornecedor da chave, visualizar a chave ou excluir a chave. O seguinte código PowerShell calcula o nome e os fornecedores da chave:

$cert = "client.pem"
# Compute the SHA256 fingerprint:
$fingerprint = (openssl x509 -in $cert -noout -fingerprint -sha256) -replace 'SHA256 Fingerprint=', '' -replace ':', ''
if (Select-String -Path $cert -Pattern '-----BEGIN RSA PRIVATE KEY-----' -Quiet) {
# Key name for PKCS#1 key:
$key_name = "libmongoc-$fingerprint-pkcs1"
$csp = "Microsoft Enhanced Cryptographic Provider v1.0"
} elseif (Select-String -Path $cert -Pattern '-----BEGIN PRIVATE KEY-----' -Quiet) {
# Key name for PKCS#8 key:
$key_name = "libmongoc-$fingerprint-pkcs8"
$csp = "Microsoft Software Key Storage Provider"
} else {
Write-Output "Unexpected PEM format for $cert"
}

O seguinte código PowerShell exibe detalhes sobre a chave:

certutil -user -csp $csp -key $key_name

O seguinte código do PowerShell exclui a chave:

certutil -user -csp $csp -key $key_name

O MongoDB C Driver é compatível com a biblioteca TLS nativa de Darwin e com o Common Crypto, sua biblioteca de criptografia nativa.

Quando compiladas com Secure Transport, as opções ca_dir e crl_file de um mongoc_ssl_opt_t não são suportadas. Um erro será emitido se qualquer um for usado.

Quando tlsCAFile estiver definido, o driver permitirá somente certificados de servidor emitidos pela autoridade (ou autoridades) fornecida. Quando nenhum tlsCAFile estiver definido, o driver usará as Autoridades de Certificação nos chaveiros desbloqueados.

Configurar tlsDisableOCSPEndpointCheck e tlsDisableCertificateRevocationCheck não tem efeito ao compilar com transporte seguro.

O Protocolo de Status do Certificado Online (OCSP) é parcialmente suportado com as seguintes notas.

  • A extensão Must-Staple (consulte RFC 7633) é ignorada

  • A conexão continuará se um certificado Must-Staple for apresentado sem uma resposta grampeada e o respondente OCSP estiver inativo

  • A conexão não continuará se o cliente receber uma resposta revogada de um respondente OCSP

Dica

For more information about OCSP, see RFC 6960.

Para obter mais informações sobre os objetos e funções mencionados neste guia, consulte a seguinte documentação da API: