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

Configurando o TLS

Nesta página

  • Configuração com opções de URI
  • Configuração com mongoc_ssl_opt_t
  • Autenticação do cliente
  • Verificação do certificado de servidor MongoDB
  • Bibliotecas suportadas
  • OpenSSL
  • LibreSSL / libtls
  • Suporte nativo a TLS no Windows (canal seguro)
  • Suporte a TLS nativo no macOS / Darwin (transporte seguro)

Ative o TLS incluindo tls=true no URI.

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

As seguintes opções de URI podem ser usadas para configurar ainda mais o TLS:

Constante
Chave
Descrição
MONGOC_URI_TLS
tls
{true|false}, indicando se o TLS deve ser usado.
MONGOC_URI_TLSCERTIFICATEKEYFILE
tlscertificatekeyfile
Caminho para a Chave privada formatada em PEM, com seu Certificado público concatenado no final.
MONGOC_URI_TLSCERTIFICATEKEYFILEPASSWORD
tlscertificatekeypassword
A senha, se houver, a ser usada para destravar a chave privada criptografada.
MONGOC_URI_TLSCAFILE
tlscaFile
Uma ou um grupo de Autoridades de Certificação que devem ser consideradas confiáveis.
MONGOC_URI_TLSALLOwinvalidCERTIFICATES
tlsAllowInvalidCertificates
Aceitar e ignorar erros de verificação de certificado (por exemplo emissor não confiável, expirado etc.)
MONGOC_URI_TLSALLOwinvalidhostnames
tlsAllowInvalidHostnames
Ignorar verificação do nome de host do certificado (por exemplo Man In The Middle, usando certificado válido, mas emitido para outro nome de host)
MONGOC_URI_TLSINSECURE
tlsinsecure
{true|false}, indicando se as opções inseguras de TLS devem ser usadas. Atualmente, isso implica MONGOC_URI_TLSALLOwinVALIDCERTIFICATES e MONGOC_URI_TLSALLOwinVALIDHOSTNAMES.
MONGOC_URI_TLSDISABLECERTIFICATEREVOCATIONCHECK
tlsdisablecertificaterevogaçãocheck
{true|false}, indica se a verificação de revogação (CRL / OCSP) deve ser desativada.
MONGOC_URI_TLSDISABLEOCSPENDPOINTCHECK
tlsdisableocspendpointcheck
{true|false}, indica se os endpoints do respondente OCSP não devem ser solicitados quando uma resposta OCSP não deve ser grampeada.

Como alternativa, o mongoc_ssl_opt_t struct pode ser usado para configurar TLS com mongoc_client_set_ssl_opts ou mongoc_client_pool_set_ssl_opts. A maioria das opções configuráveis pode ser definida usando o URI da connection string.

chave mongoc_ssl_opt_t
Chave de URI
pem_file
tlsClientCertificateKeyFile
pem_pwd
tlsClientCertificateKeyPassword
ca_file
tlsCAFile
flexible_cert_validation
tlsAllowInvalidCertificates
allow_invalid_hostname
tlsAllowInvalidHostnames

As únicas exclusões são crl_file e ca_dir. Esses só podem ser definidos com mongoc_ssl_opt_t.

Quando o MongoDB for iniciado com o TLS ativado, ele exigirá, por padrão, que o cliente forneça um certificado de cliente emitido por uma autoridade de certificação especificada por --tlsCAFile ou por uma autoridade confiável do armazenamento de certificados nativo em uso no servidor.

Para fornecer o certificado do cliente , defina o tlsCertificateKeyFile no URI para um arquivo de certificado protegido PEM.

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

O driver do MongoDB C verificará automaticamente a validade do certificado do servidor , como o emitido pela Autoridade de Certificação configurada, a validação do nome do host e a expiração.

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

Este comportamento é controlado utilizando as opções tlsAllowInvalidHostnames, tlsDisableOCSPEndpointCheck, tlsDisableCertificateRevocationCheck e tlsAllowInvalidCertificates respectivamente. Por padrão, todos são definidos como false.

Não é recomendável alterar esses padrões, pois isso expõe o cliente a ataques Man In The Middle (quando tlsAllowInvalidHostnames está definido), certificados inválidos (quando tlsAllowInvalidCertificates está definido) ou 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. Os valores válidos são:

  • AUTO o comportamento padrão. Vincule à biblioteca TLS nativa do sistema ou tente encontrar OpenSSL.

  • DARWIN link para o Secure Transport, a biblioteca nativa de TLS no macOS.

  • WINDOWS link para o Secure Channel, a biblioteca TLS nativa no Windows.

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

  • LIBRESSL link para as libtls do LibreSSL. (As libssl compatíveis do LibreSSL podem ser vinculadas à configuração OPENSSL).

  • OFF desative o suporte ao TLS.

O driver MongoDB C usa OpenSSL, se disponível, 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. Verifique sua versão do OpenSSL da seguinte forma:

$ openssl version

Certifique-se de que o OpenSSL do seu sistema seja uma versão recente (pelo menos 1.0.1) ou instale uma versão recente em um caminho que não seja do sistema e compile com:

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) (consulte RFC 6960) é totalmente suportado ao usar o OpenSSL 1.0.1+ com as seguintes notas:

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

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 compilada em relação às bibliotecas nativas do Windows, a crl_file opção de um mongoc_ssl_opt_t não é suportado e emitirá um erro se usado.

Configurar tlsDisableOCSPEndpointCheck e tlsDisableCertificateRevocationCheck não tem efeito.

O protocolo de status do certificado online (OCSP) (consulte RFC 6960) é parcialmente suportado com as seguintes notas:

  • A extensão Must-Staple (consulte RFC 7633) é ignorado. A conexão pode continuar se um

  • O certificado Must-Staple é apresentado sem resposta grampeada (a menos que o cliente receba uma resposta revogada de um respondente OCSP).

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

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 em relação às bibliotecas nativas do Windows, a ca_dir opção de um mongoc_ssl_opt_t não é suportado e emitirá um erro se usado.

Arquivos PEM criptografados (por exemplo, configuração tlsCertificateKeyPassword) 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 pela autoridade (ou autoridades) fornecida. 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) (consulte RFC 6960) é parcialmente suportado com as seguintes notas:

  • A extensão Must-Staple (consulte RFC 7633) é ignorado. A conexão pode continuar se um certificado Must-Staple for apresentado sem resposta grampeada (a menos que o cliente receba uma resposta revogada de um respondente OCSP).

  • Quando um crl_file é definido com mongoc_ssl_opt_t, e o crl_file revogar o certificado do servidor, a resposta OCSP terá 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 crl_file o marque como revogado.

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

O MongoDB C Driver suporta a biblioteca TLS nativa de Darwin (OS X, macOS, iOS, etc.) (Secure Transport) e sua biblioteca de criptografia nativa (Common Crypto, ou CC).

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 atualmente desbloqueados.

Configurar tlsDisableOCSPEndpointCheck e tlsDisableCertificateRevocationCheck não tem efeito.

O protocolo de status do certificado online (OCSP) (consulte RFC 6960) é parcialmente suportada com as seguintes notas.

  • A extensão Must-Staple (consulte RFC 7633) é ignorado. A conexão pode continuar se um certificado Must-Staple for apresentado sem resposta grampeada (a menos que o cliente receba uma resposta revogada de um respondente OCSP).

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

Voltar

Guias