Overview
En esta guía, puedes aprender cómo conectarte a instancias de MongoDB con el TLS/SSL protocolo de seguridad utilizando la compatibilidad subyacente de TLS/SSL en el framework .NET. Para configurar su conexión para usar TLS/SSL, active la configuración de TLS/SSL en: cadena de conexión o MongoClientSettings.
Importante
TLS 1.2
El controlador .NET/C# sólo admite TLS 1.2 o superior.
Habilitar TLS
Por defecto, TLS está desactivado al conectarse a instancias de MongoDB. Puedes habilitar TLS para la conexión a tu instancia de MongoDB de dos maneras diferentes: usando una propiedad en un MongoClientSettings objeto o a través de un parámetro en tu 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 conexión cuando se utiliza una lista de nodos iniciales DNS, consulte la sección SRV Connection Format en el manual del Servidor.
Para habilitar TLS con un objeto MongoClientSettings, establece 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");
Configurar un Certificado de Cliente
Puedes configurar tu certificado X.509 utilizando MongoClientSettings. El siguiente código de muestra crea un nuevo objeto de certificado X.509 usando el archivo de certificado llamado client.p12, que está protegido por la contraseña mySuperSecretPassword. El código luego agrega este certificado al arreglo 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 una contraseña, el objeto del certificado debe contener una clave privada. Si no lo hace, su certificado no será enviado al servidor.
Permitir TLS no seguro
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 inseguros, 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 todavía 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 no seguro de dos maneras diferentes: usando una propiedad en un objeto de MongoClientSettings o mediante un parámetro en su cadena de conexión.
Para permitir TLS no seguro con un objeto MongoClientSettings, configura la propiedad AllowInsecureTls a 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
Siempre configure esta opción en false en producción. Por razones de seguridad, es importante que el certificado del servidor esté validado correctamente.
Comprobar revocación de certificado
Cuando un certificado X.509 deja de ser confiable--por ejemplo, si su llave privada ha sido comprometida--la autoridad de certificación revocará el certificado.
Por defecto, el controlador .NET/C# no verifica si el certificado de un servidor ha sido revocado antes de conectarse. Puedes habilitar la verificación de revocación usando 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 driver .NET/C# no realiza la verificación de revocación por defecto porque este es el comportamiento predeterminado de la clase SslStream tanto en el marco .NET y en el estándar .NET.
Comprobación de revocación por sistema operativo
El controlador .NET/C# admite los siguientes mecanismos de comprobación de revocación de manera diferente en Windows, macOS y Linux:
protocolo de Estado de Certificado en linea (OCSP), un mecanismo común para comprobar la revocación
Grapado OCSP, un mecanismo en el que el servidor incluye una respuesta OCSP con marca de tiempo al cliente con el certificado
Listas de revocación de certificados (CRL),, una alternativa al OCSP
Windows
En Windows, el driver .NET/C# admite OCSP, OCSP incorporar y listas de revocación de certificados (CRL, por sus siglas en inglés) 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.
macOS
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.
Linux
En Linux, el driver .NET/C# admite OCSP, OCSP stapling y CRL sin OCSP.
Documentación de la API
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 la API: