Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

X.509 Autenticación con TLS

En el mecanismo de autenticación X.509, el servidor y el cliente utilizan el TLS protocolo para intercambiar certificados de clave pública X.509. Puedes utilizar este mecanismo para autenticarte en MongoDB Atlas, MongoDB Enterprise Advanced y MongoDB Community Edition.

Tip

X.509 Mecanismo

Para aprender a usar TLS/SSL con el .NET/C# Driver, consulta TLS/SSL.

Para obtener más información sobre509 los certificados X., consulte X. en el manual de MongoDB Server.509

Los ejemplos de código en esta página utilizan los siguientes marcadores de posición:

  • +srv: Incluya esta opción en el prefijo de la cadena de conexión solo si se conecta a un clúster de MongoDB Atlas. Si está utilizando un objeto MongoClientSettings, puede especificar el formato srv configurando la propiedad Scheme en ConnectionStringScheme.MongoDBPlusSrv. Para obtener más información sobre la opción +srv, consulta Formatos de cadenas de conexión en el manual del Servidor MongoDB.

  • <hostname>: La dirección de red de tu implementación de MongoDB.

  • <port>Número de puerto de la implementación de MongoDB. Si omites este parámetro, el driver usará el puerto por defecto (27017). No necesitas un número de puerto al conectar a un clúster de MongoDB Atlas.

  • <X.509 certificate username>: El nombre de usuario del usuario asociado con el certificado X.509. El nombre de usuario debe coincidir con el nombre de sujeto distinguido del certificado. Si omites 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 del 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.

Para utilizar un certificado X.509 para autenticación, debes utilizar un objeto MongoClientSettings para especificar la ruta hacia tu certificado X.509 y la contraseña del certificado. El certificado debe usar el formato PKCS #12 (.p12).

Tip

Convertir .pem a .p12

Si tu certificado utiliza el formato PEM (.pem), puedes convertirlo al formato .p12 utilizando la herramienta de línea de comandos openssl, 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 debes especificar MONGODB-X509 como el mecanismo de autenticación y $external como la fuente de autenticación. Se puede especificar estas opciones ya sea en su cadena de conexión o mediante el uso de un objeto MongoCredential. Selecciona el Connection String o MongoCredential pestaña 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
};

Si utilizas Windows como sistema operativo, podrías encontrarte con un problema en el que el controlador .NET/C# no pueda 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 solucionar este problema, añade el siguiente código a tu aplicación. Este código genera cualquier certificado de X.509 que requiera tu aplicación y los almacena en disco:

using (X509Certificate2 certWithKey = certOnly.CopyWithPrivateKey(key))
{
return new X509Certificate2(certWithKey.Export(X509ContentType.Pkcs12));
}

Para aprender más sobre cualquiera de los métodos y tipos de MongoDB utilizados en esta página, consulta la siguiente documentación de la API:

Para obtener más información sobre los tipos de .NET utilizados en esta página, consulta la siguiente documentación de MSDN:

Volver

SCRAM

En esta página