Menu Docs
Página inicial do Docs
/ / /
Driver C
/

Configurar o TLS (Transport Layer Security)

Nesta página

  • Visão geral
  • Habilitar TLS
  • Especifique um arquivo CA
  • Verificação do certificado de servidor MongoDB
  • Bibliotecas suportadas
  • OpenSSL
  • LibreSSL / libtls (Preterido)
  • Suporte nativo a TLS no Windows (canal seguro)
  • Suporte a TLS nativo no macOS / Darwin (transporte seguro)
  • Documentação da API

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

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 são definidos como false.

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

  • Atlas Man In The Middle, quando tlsAllowInvalidHostnames é definido

  • Certificados inválidos, quando tlsAllowInvalidCertificates está definido

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

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.

  • LIBRESSL (Obsoleto): links para as libtls do LibreSSL. Você pode vincular ao libssl compatível do LibreSSL configurando OPENSSL.

  • 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

Quando compilado no OpenSSL, o driver tentará carregar o armazenamento de certificados padrão do sistema, conforme configurado pela distribuição. Isso pode ser substituído definindo a tlsCAFile opção URI ou com os campos ca_file e ca_dir no 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 Driver MongoDB C suporta LibreSSL através do uso de verificações de compatibilidade OpenSSL quando configurado para compilar em openssl. Ele também suporta a nova biblioteca libtls quando configurada para construir contra libressl.

Quando compilado com LibreSSL, a crl_file opção de um mongoc_ssl_opt_t não é suportada e emitirá um erro se utilizada. Configurar tlsDisableOCSPEndpointCheck e tlsDisableCertificateRevocationCheck não tem efeito.

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

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).

Quando compilada nas bibliotecas nativas do Windows, a ca_dir opção de um mongoc_ssl_opt_t não é suportada e emitirá um erro se usada.

Arquivos PEM criptografados, definidos usando a opção tlsCertificateKeyPassword URI, também não são suportados e resultarão em erro ao tentar carregá-los.

Quando tlsCAFile estiver definido, o driver permitirá somente certificados de servidor emitidos por uma ou mais autoridades fornecidas. Quando nenhum tlsCAFile estiver definido, o driver procurará a Autoridade de certificação usando o armazenamento de certificados System Local Machine Root para confirmar o certificado fornecido.

Quando crl_file está definido com mongoc_ssl_opt_t, o driver importará a lista de revogação para o armazenamento de System Local Machine Root certificados .

Configurar tlsDisableOCSPEndpointCheck não tem efeito.

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.

  • Quando um crl_file é definido com mongoc_ssl_opt_t e o crl_file revoga o certificado do servidor, a resposta OCSP tem precedência. Por exemplo, se o servidor apresentar um certificado com uma resposta OCSP grampeada válida, o certificado será considerado válido mesmo que o o crl_file marque como revogado.

Dica

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

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 o Secure Transport, as ca_dir crl_file opções e de um mongoc_ssl_opt_t não são suportados. 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

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

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

Voltar

Escolha um destino de conexão