x.509
Overview
在 X.509 身份验证机制中,服务器和客户端使用 TLS 协议交换 X.509 公钥证书。您可以使用此机制对MongoDB Atlas、 MongoDB Enterprise Advanced和MongoDB Community Edition进行身份验证。
提示
X.509 机制
代码占位符
本页上的代码示例使用以下占位符:
+srv
:仅当您连接到MongoDB Atlas 群集时,才在连接字符串前缀中包含此选项。要学习;了解有关+srv
选项的更多信息,请参阅MongoDB Server手册中的连接字符串格式。<hostname>
: MongoDB 部署的网络解决。<port>
: MongoDB 部署的端口号。如果省略此参数,驾驶员将使用默认端口号 (27017
)。连接MongoDB Atlas 群集时无需端口号。<X.509 certificate username>
:与 X.509 证书关联的用户名的用户名。用户名必须与证书的主题标识名匹配。如果省略此参数, MongoDB 部署将从 X.509 证书推断用户名。<path to X.509 certificate>
:X.509 证书文件的路径。<X.509 certificate password>
:X.509 证书的密码。
要使用本页上的代码示例,请将这些占位符替换为您自己的值。
在应用程序中使用 X.509 身份验证
要使用 X.509 证书进行身份验证,必须使用MongoClientSettings
对象来指定 X.509 证书的路径以及证书的密码。证书必须使用 PKCS #12 (.p12
) 格式。
提示
将 .pem 转换为 .p12
您还必须指定 MONGODB-X509
作为身份验证机制,并将 $external
指定为身份验证源。您可以在连接字符串中或使用 MongoCredential
对象来指定这些选项。选择 Connection String 或 MongoCredential标签页,查看相应的语法:
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>"]), };
故障排除
如果您使用Windows作为操作系统,则可能会遇到.NET/ C#驱动程序无法在内存中找到 X.509
身份验证证书的问题。此错误显示以下错误消息:
No credentials are available in the security package
要解决此问题,请将以下代码添加到您的应用程序中。此代码生成应用程序所需的任何 X.509
证书并将它们存储到磁盘:
using (X509Certificate2 certWithKey = certOnly.CopyWithPrivateKey(key)) { return new X509Certificate2(certWithKey.Export(X509ContentType.Pkcs12)); }
API 文档
要学习;了解有关此页面上使用的任何MongoDB方法和类型的更多信息,请参阅以下API文档:
有关此页面上使用的.NET类型的详细信息,请参阅以下 MSDN 文档: