Configurando o TLS
Nesta página
Configuração com opções de URI
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. |
Configuração com mongoc_ssl_opt_t
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.
Autenticação do cliente
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);
Verificação do certificado de servidor MongoDB
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).
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. 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 comOPENSSL_ROOT
.LIBRESSL
link para as libtls do LibreSSL. (As libssl compatíveis do LibreSSL podem ser vinculadas à configuraçãoOPENSSL
).OFF
desative o suporte ao TLS.
OpenSSL
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 ocrl_file
revoga o certificado do servidor, o certificado é considerado revogado (mesmo que o certificado tenha uma resposta OCSP grampeada válida)
LibreSSL / libtls
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.
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 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 ocrl_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 ocrl_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.
Suporte a TLS nativo no macOS / Darwin (transporte seguro)
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.