Overview
En el mecanismo de autenticación X., el servidor y el cliente utilizan el509 ProtocoloTLS para intercambiar 509 certificados de clave pública X.. Puede usar este mecanismo para autenticarse en MongoDB Atlas, MongoDB Enterprise Advanced y MongoDB Community Edition.
Tip
Mecanismo X.509
Para aprender a usar TLS/SSL con el controlador .NET/C#, consulte Protocolo de transmisión de datos (TLS/SSL).
Para obtener más información sobre509 los certificados X., consulte X. en el manual de MongoDB Server.509
Marcadores de posición de código
Los ejemplos de código de esta página utilizan los siguientes marcadores de posición:
+srvIncluya esta opción en el prefijo de la cadena de conexión solo si se conecta a un clúster de MongoDB Atlas. Si utiliza unMongoClientSettingsobjeto, puede especificar elsrvformato estableciendo laSchemepropiedadConnectionStringScheme.MongoDBPlusSrven. Para obtener más información sobre la+srvopción, consulte "Formatos de cadena de conexión" en el manual de MongoDB Server.<hostname>: La dirección de red de tu implementación de MongoDB.<port>El número de puerto de la implementación de MongoDB. Si omite este parámetro, el controlador usa el número de puerto predeterminado (27017). No necesita un número de puerto para conectarse a un clúster de MongoDB Atlas.<X.509 certificate username>: El nombre de usuario del usuario asociado al certificado X.509. El nombre de usuario debe coincidir con el nombre de sujeto distinguido del certificado. Si se omite este parámetro, la implementación de MongoDB infiere el nombre de usuario del certificado X.509.<path to X.509 certificate>:La ruta al archivo de certificado X.509.<X.509 certificate password>:La contraseña para el certificado X.509.
Para utilizar los ejemplos de código en esta página, reemplace estos marcadores de posición con sus propios valores.
Uso de la autenticación X.509 en su aplicación
Para usar un509 certificado X. para la autenticación, debe usar un MongoClientSettings objeto para especificar la ruta a su509 certificado X. y la contraseña. El certificado debe usar el 12 .p12formato PKCS # ().
Tip
Convertir .pem a .p12
Si su certificado utiliza el formato PEM (),.pem puede convertirlo al .p12 formato utilizando la openssl herramienta de línea de comandos, como se muestra en el siguiente ejemplo de código:
openssl pkcs12 -export -out <.p12 file> -inkey <private key file> -in <.pem file>
Puede proporcionar un certificado en formato .pem directamente utilizando el método X509Certificate2.CreateFromPem(), como se muestra en el siguiente ejemplo de código:
var certPem = File.ReadAllText("client.crt"); var keyPem = File.ReadAllText("client.key"); var rsa = RSA.Create(); rsa.ImportFromEncryptedPem(keyPem, "<password>"); var cert = X509Certificate2.CreateFromPem(certPem); var clientCertificate = cert.CopyWithPrivateKey(rsa);
Para obtener más información sobre,openssl-pkcs12 consulte la documentación de OpenSSL.
También debe especificar MONGODB-X509 como mecanismo de autenticación y $external como fuente de autenticación. Puede especificar estas opciones en la cadena de conexión o mediante un objeto MongoCredential. Seleccione Connection String o la pestaña MongoCredential para ver la sintaxis correspondiente:
var connectionString = "mongodb[+srv]://<hostname>[:<port>]/?authSource=$external&authMechanism=MONGODB-X509"; var settings = MongoClientSettings.FromConnectionString(connectionString); settings.UseTls = true; settings.SslSettings = new SslSettings { ClientCertificates = new List<X509Certificate>() { new X509Certificate2("<path to X.509 certificate>", "<X.509 certificate password>") } };
var credential = MongoCredential.CreateMongoX509Credential("<X.509 certificate username>"); var settings = new MongoClientSettings { Credential = credential, SslSettings = new SslSettings { ClientCertificates = new List<X509Certificate>() { new X509Certificate2("<path to X.509 certificate>", "<X.509 certificate password>") }, }, UseTls = true, Server = new MongoServerAddress("<hostname>"[, "<port>"]), Scheme = ConnectionStringScheme.MongoDBPlusSrv // Needed when connecting to MongoDB Atlas };
Solución de problemas
Si usa Windows como sistema operativo, podría experimentar un problema en el que el controlador .NET/C# no puede localizar un certificado de autenticación X.509 en la memoria. Este error muestra el siguiente mensaje:
No credentials are available in the security package
Para resolver este problema, agregue el siguiente código a su aplicación. Este código genera los certificados X.509 que requiere su aplicación y los almacena en el disco:
using (X509Certificate2 certWithKey = certOnly.CopyWithPrivateKey(key)) { return new X509Certificate2(certWithKey.Export(X509ContentType.Pkcs12)); }
Documentación de la API
Para obtener más información sobre cualquiera de los métodos y tipos de MongoDB utilizados en esta página, consulte la siguiente documentación de API:
Para obtener más información sobre los tipos .NET utilizados en esta página, consulte la siguiente documentación de MSDN: