Configurar o TLS (Transport Layer Security)
Nesta página
Visão geral
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.
Habilitar TLS
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ãoUsando a função
mongoc_uri_set_option_as_bool()
para definir a opção de conexãoMONGOC_URI_TLS
comotrue
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 .
Especifique um arquivo CA
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 raizUsando a função
mongoc_uri_set_option_as_utf8()
para definir a opçãoMONGOC_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);
Verificação do certificado de servidor MongoDB
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
é definidoCertificados inválidos, quando
tlsAllowInvalidCertificates
está definidoCertificados potencialmente revogados, quando
tlsDisableOCSPEndpointCheck
outlsDisableCertificateRevocationCheck
estão definidos
Bibliotecas suportadas
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 comOPENSSL_ROOT
.LIBRESSL
(Obsoleto): links para as libtls do LibreSSL. Você pode vincular ao libssl compatível do LibreSSL configurandoOPENSSL
.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.
OpenSSL
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.
LibreSSL / libtls (Preterido)
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.
Suporte nativo a TLS no Windows (canal seguro)
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 ocrl_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 ocrl_file
marque como revogado.
Dica
Para obter mais informações sobre OCSP, consulte RFC 6960.
Suporte a TLS nativo no macOS / Darwin (transporte seguro)
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.
Documentação da API
Para obter mais informações sobre os objetos e funções mencionados neste guia, consulte a seguinte documentação da API: