Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Configurar o TLS (Transport Layer Security)

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, a biblioteca PHP 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

Esta página pressupõe conhecimento prévio de TLS/SSL e acesso a certificados válidos. Uma descrição completa de certificados TLS/SSL, PKI (Public Key Infrastructure) e Autoridades de Certificação (CAs) está além do escopo desta documentação.

Dica

A biblioteca PHP delega a maior parte do comportamento TLS ao Driver MongoDB C. Para obter informações sobre como o driver C lida com o TLS, incluindo etapas de configuração e comportamento esperado, consulte Configurar o TLS na documentação do driver C.

Para habilitar o TLS para a conexão com sua implantação do MongoDB , defina a opção de conexão tls como true. Você pode fazer isso de duas maneiras: usando o uriOptions parâmetro do MongoDB\Client construtor ou por meio de um parâmetro em sua string de conexão.

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true';
$client = MongoDB\Client($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 .

Durante a negociação TLS, o sistema do MongoDB apresenta um arquivo de chave de certificado para seu aplicação para estabelecer sua identidade. Normalmente, o certificado de um sistema foi assinado por uma CA (autoridade de certificação) conhecida, e seu aplicação depende dessa CA para validar o certificado.

No entanto, durante os testes, você pode querer agir como sua própria CA. Nesse caso, você deve instruir a biblioteca PHP a usar seus certificados CA em vez dos assinados por outro CA.

Para fazer isso, use a opção de conexão tlsCAFile para especificar o caminho para um arquivo .pem que contém a cadeia de certificados raiz. Você pode fazer isso de duas maneiras: usando o uriOptions parâmetro do MongoDB\Client construtor ou por meio de um parâmetro em sua string de conexão.

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsCAFile' => '/path/to/ca.pem',
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsCAFile=/path/to/ca.pem';
$client = MongoDB\Client($uri);

Se você estiver usando OpenSSL ou LibreSSL (libtls) para suporte a TLS, também poderá usar a opção ca_dir para instruir a biblioteca PHP a procurar um arquivo CA em um diretório. O driver pesquisa nesse diretório se não encontrar um arquivo CA no caminho especificado na opção tlsCAFile .

O seguinte exemplo de código mostra como utilizar o parâmetro driverOptions para especificar a opção ca_dir :

<?php
$uri = 'mongodb://<hostname>:<port>';
$uriOptions = ['tls' => true];
$driverOptions = ['ca_dir' => '/path/to/search/'];
$client = new MongoDB\Client($uri, $uriOptions, $driverOptions);

Dica

Esta opção corresponde ao parâmetro OpenSSL SSL_CTX_load_verify_locations e ao parâmetro LibreSSL tls_config_set_ca_path.

Quando um certificado X.509 não é mais confiável - por exemplo, se sua chave privada tiver sido comprometida - a CA revoga o certificado. A biblioteca PHP inclui duas maneiras de verificar se o certificado de um servidor foi revogado.

O processo do Protocolo de Status do Certificado Online (OCSP) varia dependendo da versão do MongoDB Server à qual você está se conectando:

  • MongoDB v4.4 ou posterior: o servidor grampeia uma resposta OCSP com registro de data e hora em seu certificado. A biblioteca PHP valida o certificado em relação à resposta OCSP. Se a CA tiver revogado o certificado ou se a resposta OCSP for inválida, a negociação TLS falhará.

  • MongoDB v4.3 ou anterior: o servidor fornece um endpoint OCSP, com o qual a biblioteca PHP entra em contato diretamente. A biblioteca PHP então valida o certificado em relação à resposta OCSP. Se a CA não tiver revogado o certificado, o handshake TLS continuará, mesmo que a resposta OCSP seja inválida ou malformada.

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.

Para impedir que a biblioteca PHP entre em contato com o endpoint OCSP, defina a opção de conexão tlsDisableOCSPEndpointCheck como true. Você pode fazer isso de duas maneiras: passando um argumento para o construtor MongoDB\Client ou por meio de um parâmetro em sua string de conexão.

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsDisableOCSPEndpointCheck' => true,
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsDisableOCSPEndpointCheck=true';
$client = MongoDB\Client($uri);

Observação

Mesmo que a opção tlsDisableOCSPEndpointCheck esteja definida como true, a biblioteca PHP ainda verificará qualquer resposta OCSP grampeada no certificado de um servidor.

Em vez de usar o OCSP, você pode usar a instrução da biblioteca PHP para verificar o certificado do servidor em relação a uma Lista de revogação de certificados (CRL) publicada pela CA. Para fazer isso, defina a opção crl_file para o caminho do arquivo da CRL. Inclua esta opção no driverOptions parâmetro do MongoDB\Client construtor , como mostrado no seguinte exemplo de código:

<?php
$uri = 'mongodb://<hostname>:<port>';
$uriOptions = ['tls' => true];
$driverOptions = ['crl_file' => '/path/to/file.pem'];
$client = new MongoDB\Client($uri, $uriOptions, $driverOptions);

Dica

Você pode especificar um arquivo CRL no formato .pem ou .der .

Algumas implementações do MongoDB exigem que cada aplicação de conexão apresente um certificado de cliente que comprove sua identidade. Para especificar o certificado do cliente para a biblioteca PHP apresentar, defina a opção tleCertificateKeyFile para o caminho do arquivo .pem que contém seu certificado e chave privada.

Você pode fazer isso de duas maneiras: usando o parâmetro uriOptions do construtor MongoDB\Client ou por meio de um parâmetro em sua string de conexão.

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsCertificateKeyFile' => '/path/to/client.pem',
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=/path/to/client.pem';
$client = MongoDB\Client($uri);

Importante

Seu certificado de cliente e chave privada devem estar no mesmo arquivo .pem . Se estiverem armazenados em arquivos diferentes, você deverá concatená-los. O exemplo a seguir mostra como concatenar um arquivo de chave e um arquivo de certificado em um terceiro arquivo chamado combined.pem em um sistema Unix:

$ cat key.pem cert.pem > combined.pem

Se a chave privada em seu arquivo de certificado estiver criptografada, você deverá usar a opção tlsCertificateKeyFilePassword para fornecer a senha. Você pode fazer isso de duas maneiras: usando o uriOptions parâmetro do MongoDB\Client construtor ou por meio de um parâmetro em sua string de conexão.

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsCertificateKeyFile' => '/path/to/client.pem',
'tlsCertificateKeyFilePassword' => '<passphrase>',
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=/path/to/client.pem&tlsCertificateKeyFilePassword=<passphrase>';
$client = MongoDB\Client($uri);

Quando o TLS está habilitado, a biblioteca PHP verifica automaticamente o certificado apresentado pelo servidor . Ao testar seu código, você pode desativar essa verificação. Isso é conhecido como TLS inseguro.

Quando o TLS inseguro está ativado, o driver exige apenas que o servidor apresente um certificado X.509 . O driver aceita um certificado mesmo que alguma das seguintes afirmações seja verdadeira:

  • O nome do host do servidor e o nome do assunto (ou nome alternativo do assunto) no certificado não correspondem.

  • O certificado expirou ou ainda não é válido.

  • O certificado não tem um certificado raiz confiável na cadeia.

  • A finalidade do certificado não é válida para identificação do servidor.

Observação

Mesmo quando o TLS inseguro está habilitado, a comunicação entre o cliente e o servidor é criptografada com TLS.

Para habilitar o TLS inseguro, defina a opção de conexão tlsInsecure como true. Você pode fazer isso de duas maneiras: passando um argumento para o construtor MongoDB\Client ou por meio de um parâmetro em sua connection string.

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsInsecure' => true,
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsInsecure=true';
$client = MongoDB\Client($uri);

Para desabilitar somente a validação do certificado, defina a opção tlsAllowInvalidCertificates como true e defina a opção tlsInsecure como false ou omita-a:

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsAllowInvalidCertificates' => true,
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsAllowInvalidCertificates=true';
$client = MongoDB\Client($uri);

Para desabilitar somente a verificação do nome de host, configure a opção tlsAllowInvalidHostnames para true e configure a opção tlsInsecure para false ou omita:

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsAllowInvalidHostnames' => true,
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsAllowInvalidHostnames=true';
$client = MongoDB\Client($uri);

Aviso

Não use em produção

Sempre defina as opções tlsInsecure, tlsAllowInvalidCertificates e tlsAllowInvalidHostnames como false em produção.

Definir qualquer uma dessas opções como true em um ambiente de produção torna seu aplicativo desprotegido e potencialmente vulnerável a certificados expirados e a processos externos que se apresentam como instâncias de cliente válidas.

Para saber mais sobre como configurar o TLS para a biblioteca PHP, consulte a seguinte documentação da API: