Habilitar TLS em uma conexão
Nesta página
Visão geral
Neste guia, você verá como se conectar a instâncias do MongoDB com a conexão TLS/SSL protocolo de segurança usando o suporte TLS/SSL subjacente no framework .NET . Para configurar sua conexão para usar TLS/SSL, habilite as configurações de TLS/SSL nastring de conexão ou MongoClientSettings.
Habilitar TLS
Por padrão, o TLS está desabilitado ao conectar a instâncias MongoDB. Você pode habilitar o TLS para a conexão com sua instância do MongoDB de duas maneiras diferentes: usando uma propriedade em um objeto MongoClientSettings
ou por meio de um parâmetro em sua connection string.
Observação
Se você se conectar com o protocolo de seedlist DNS, o driver ativará TLS/SSL por padrão. Para desativá-lo, defina o valor do parâmetro tls
ou ssl
como false
em sua string de conexão ou instância MongoClientSettings
.
Para saber mais sobre o comportamento da conexão ao usar uma lista de sementes DNS, consulte a seção Formato de conexão SRV no manual do servidor.
Para habilitar o TLS com um objeto MongoClientSettings
, defina a propriedade UseTls
como true
:
var settings = new MongoClientSettings { UseTls = true }; var client = new MongoClient(settings);
Para habilitar o TLS com uma connection string, atribua ao parâmetro tls
um valor de true
na connection string passada para o construtor MongoClient
:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true");
Configurar um Certificado de Cliente
Você pode configurar seu certificado X.509 utilizando MongoClientSettings
. A seguinte amostra de código cria um novo objeto de certificado X.509 utilizando o arquivo de certificado denominado client.p12
, que é protegido pela senha mySuperSecretPassword
. O código então adiciona esse certificado à matriz SslSettings.ClientCertificates
em MongoClientSettings
.
var cert = new X509Certificate2("client.p12", "mySuperSecretPassword"); var settings = new MongoClientSettings { SslSettings = new SslSettings { ClientCertificates = new[] { cert } }, UseTls = true };
Importante
Ao carregar um certificado com uma senha, o objeto de certificado deve conter uma chave privada. Caso contrário, seu certificado não será passado para o servidor.
Permitir TLS Inseguro
Quando o TLS está habilitado, o driver .NET/C# verifica automaticamente o certificado apresentado pelo servidor. Ao testar seu código, você pode desabilitar a verificação do certificado. Isso é conhecido como TLS inseguro.
Ao usar TLS inseguro, o único requisito é que o servidor apresente um certificado X.509. O driver aceitará 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.
Você pode permitir o TLS inseguro de duas maneiras diferentes: usando uma propriedade em um objeto MongoClientSettings
ou por meio de um parâmetro em sua cadeia de conexão.
Para permitir TLS inseguro com um objeto MongoClientSettings
, defina a propriedade AllowInsecureTls
como true
:
var settings = new MongoClientSettings { UseTls = true, AllowInsecureTls = true }; var client = new MongoClient(settings);
Para permitir TLS inseguro utilizando uma string de conexão, atribua ao parâmetro de string de conexão tlsInsecure
um valor de true
:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true&tlsInsecure=true");
Aviso
Sempre defina esta opção como false
em produção. Por motivos de segurança, é importante que o certificado do servidor seja validado corretamente.
Verifique a revogação do certificado
Quando um certificado X.509 não deve mais ser confiável - por exemplo, se sua chave privada tiver sido comprometida - a autoridade de certificação revogará o certificado.
Por padrão, o driver .NET/C# não verifica se o certificado de um servidor foi revogado antes de se conectar. Você pode habilitar a verificação de revogação utilizando o MongoClientSettings
ou a connection string.
Para habilitar a verificação de revogação utilizando MongoClientSettings
, configure SslSettings.CheckCertificateRevocation
para true
:
var settings = new MongoClientSettings { SslSettings = new SslSettings { CheckCertificateRevocation = true }, UseTls = true };
Para ativar a verificação de revogação utilizando uma string de conexão, atribua ao parâmetro de string de conexão tlsDisableCertificateRevocationCheck
um valor de false
:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true&tlsDisableCertificateRevocationCheck=false");
Observação
O driver .NET/C# não verifica a revogação por padrão, pois este é o comportamento padrão da classe SslStream
no framework .NET e no padrão .NET.
Verificação de revogação pelo sistema operacional
O Driver .NET/C# é compatível com os seguintes mecanismos de verificação de revogação de forma diferente no Windows, macOS e Linux:
Protocolo de Status do Certificado On-line (OCSP), um mecanismo comum para verificar a revogação
Grampeamento OCSP, um mecanismo no qual o servidor inclui uma resposta OCSP com registro de data e hora para o cliente junto com o certificado
Listas de revogação de certificados (CRLs),, uma alternativa ao OCSP
Windows
No Windows, o driver .NET/C# oferece suporte a OCSP, grampeamento OCSP e CRLs sem OCSP, tanto no .NET Framework quanto no .NET Core.
Aviso
No Windows, o driver .NET/C# relatará uma "falha rígida" e cancelará o handshake TLS se o respondente OCSP não estiver disponível. Outros sistemas operacionais e drivers relatarão uma "falha suave" e continuarão se conectando.
macOS
No macOS, o Driver .NET/C# suporta OCSP e grampeamento OCSP.
Começando com o .NET Core 2,0, o driver não suporta CRLs sem OCSP.
Linux
No Linux, o Driver .NET/C# suporta OCSP, grampeamento OCSP e CRLs sem OCSP.
Documentação da API
Para saber mais sobre qualquer uma das opções de conexão discutidas nesta guia, consulte a seguinte documentação da API: