Docs Menu
Docs Home
/ /

Habilitar TLS en una conexión

En esta guía, puede aprender cómo conectarse a instancias de MongoDB con el Protocolo de seguridadTLS/SSL que utiliza la compatibilidad subyacente con TLS/SSL en .NET Framework. Para configurar su conexión para usar TLS/SSL, habilite la configuración de TLS/SSL en... cadena de conexión o MongoClientSettings.

Importante

TLS 1.2

El controlador .NET/C# solo admite TLS 1.2 o superior.

De forma predeterminada, TLS está deshabilitado al conectarse a instancias de MongoDB. Puede habilitar TLS para la conexión a su instancia de MongoDB de dos maneras diferentes: mediante una propiedad en un MongoClientSettings objeto o a través de un parámetro en su cadena de conexión.

Nota

Si se conecta mediante el protocolo de lista de semillas DNS, el controlador habilita TLS/SSL de forma predeterminada. Para deshabilitarlo, configure el valor del parámetro tls o ssl en false en su cadena de conexión o instancia MongoClientSettings.

Para obtener más información sobre el comportamiento de la conexión cuando utiliza una lista de semillas DNS, consulte la sección Formato de conexión SRV en el manual del servidor.

Para habilitar TLS con un objeto MongoClientSettings, establezca la propiedad UseTls en true:

var settings = new MongoClientSettings { UseTls = true };
var client = new MongoClient(settings);

Para habilitar TLS con una cadena de conexión, asigne al parámetro tls un valor de true en la cadena de conexión pasada al constructor MongoClient:

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true");

Puede configurar su certificado X.509 usando MongoClientSettings. El siguiente ejemplo de código crea un nuevo objeto de certificado X.509 usando el archivo de certificado client.p12, protegido por la contraseña mySuperSecretPassword. A continuación, el código añade este certificado a la matriz SslSettings.ClientCertificates en MongoClientSettings.

var cert = new X509Certificate2("client.p12", "mySuperSecretPassword");
var settings = new MongoClientSettings
{
SslSettings = new SslSettings
{
ClientCertificates = new[] { cert }
},
UseTls = true
};

Importante

Al cargar un certificado con contraseña, el objeto del certificado debe contener una clave privada. De lo contrario, el certificado no se enviará al servidor.

Cuando TLS está habilitado, el controlador .NET/C# verifica automáticamente el certificado que presenta el servidor. Al probar el código, puede deshabilitar la verificación del certificado. Esto se conoce como TLS inseguro.

Al usar TLS inseguro, el único requisito es que el servidor presente un certificado X.509. El controlador aceptará un certificado incluso si se cumple alguna de las siguientes condiciones:

  • El nombre de host del servidor y el nombre del sujeto (o nombre alternativo del sujeto) en el certificado no coinciden.

  • El certificado está caducado o aún no es válido.

  • El certificado no tiene un certificado raíz confiable en la cadena.

  • El propósito del certificado no es válido para la identificación del servidor.

Puede permitir TLS inseguro de dos maneras diferentes: utilizando una propiedad en un objeto MongoClientSettings o a través de un parámetro en su cadena de conexión.

Para permitir TLS inseguro con un objeto MongoClientSettings, establezca la propiedad AllowInsecureTls en true:

var settings = new MongoClientSettings
{
UseTls = true,
AllowInsecureTls = true
};
var client = new MongoClient(settings);

Para permitir TLS inseguro mediante una cadena de conexión, asigne al parámetro de cadena de conexión tlsInsecure un valor de true:

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true&tlsInsecure=true");

Advertencia

Establezca siempre esta opción en false en producción. Por razones de seguridad, es importante que el certificado del servidor esté correctamente validado.

Cuando un certificado X.509 ya no es confiable (por ejemplo, si su clave privada se ha visto comprometida), la autoridad certificadora revocará el certificado.

De forma predeterminada, el controlador .NET/C# no comprueba si el certificado de un servidor ha sido revocado antes de conectarse. Puede habilitar la comprobación de revocación mediante MongoClientSettings o la cadena de conexión.

Para habilitar la comprobación de revocación usando MongoClientSettings, configure SslSettings.CheckCertificateRevocation en true:

var settings = new MongoClientSettings
{
SslSettings = new SslSettings
{
CheckCertificateRevocation = true
},
UseTls = true
};

Para habilitar la verificación de revocación mediante una cadena de conexión, asigna el valor false al parámetro de cadena de conexión tlsDisableCertificateRevocationCheck:

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true&tlsDisableCertificateRevocationCheck=false");

Nota

El controlador .NET/C# no verifica la revocación de manera predeterminada porque este es el comportamiento predeterminado de la SslStream clase tanto en el marco .NET como en el estándar .NET.

El controlador .NET/C# admite los siguientes mecanismos de comprobación de revocación de forma diferente en Windows, macOS y Linux:

En Windows, el controlador .NET/C# admite OCSP, grapado de OCSP y CRL sin OCSP, tanto en .NET Framework como en .NET Core.

Advertencia

En Windows, el driver de .NET/C# notifica un "fallo grave" y cancela el handshake TLS si el respondedor de OCSP no está disponible. Otros sistemas operativos y drivers reportan una "falla leve" y continúan conectándose.

En macOS, el controlador .NET/C# admite OCSP y grapado de OCSP.

A partir de .NET Core,2.0 el controlador no admite CRL sin OCSP.

En Linux, el controlador .NET/C# admite OCSP, grapado OCSP y CRL sin OCSP.

Para obtener más información sobre cualquiera de las opciones de conexión analizadas en esta guía, consulte la siguiente documentación de API:

Volver

Encriptación en uso

En esta página