Visão geral
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.
Habilitar TLS
Você pode habilitar o TLS em uma conexão com sua instância MongoDB das seguintes maneiras:
Definindo o parâmetro
tlsem sua string de conexãoUsando a função
mongoc_uri_set_option_as_bool()para definir a opção de conexãoMONGOC_URI_TLScomotrue
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 .
Especificar um Certificado de Cliente
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
tlsCertificateKeyFileem sua string de conexão para um arquivo.pemcontendo a cadeia de certificado raizUsando a função
mongoc_uri_set_option_as_utf8()para definir a opçãoMONGOC_URI_TLSCERTIFICATEKEYFILEpara um arquivo.pemcontendo a cadeia de certificado raiz
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 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
tlsAllowInvalidHostnamesis setCertificados inválidos, quando
tlsAllowInvalidCertificatesestá definidoCertificados potencialmente revogados, quando
tlsDisableOCSPEndpointCheckoutlsDisableCertificateRevocationCheckestã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.
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.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
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
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).
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_fileis set with mongoc_ssl_opt_t, and thecrl_filerevokes 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 thecrl_filemarks it as revoked.
Dica
For more information about OCSP, see RFC 6960.
Gerenciando chaves importadas
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
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 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.
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: