【问题标题】:Unable to connect to MongoDB server using x509 certificate authentication from c#无法使用来自 c# 的 x509 证书身份验证连接到 MongoDB 服务器
【发布时间】:2017-09-05 05:19:43
【问题描述】:

我已按照文档https://docs.mongodb.com/manual/core/security-x.509/ 中的说明配置了 MongoDB 服务器 我使用 mongo shell 连接它工作正常。

接下来我尝试从 c# 驱动程序连接到同一服务器,但引发了超时异常。 下面是我的代码

var cert = new X509Certificate2(@"C:\Program Files\MongoDB\Server\3.2\ssl\client.pfx", "secretkey");
            var sslcrd = MongoCredential.CreateMongoX509Credential("CN=Client1,O=School,ST=Some-State,C=IN");
            settings.SslSettings = new SslSettings() ; 
            settings.UseSsl = true;
            settings.SslSettings.ClientCertificates = new List<X509Certificate>()
    {
        cert
    };
            settings.SslSettings.EnabledSslProtocols = SslProtocols.Default;
            settings.SslSettings.ClientCertificateSelectionCallback =
                (sender, host, certificates, certificate, issuers) => settings.SslSettings.ClientCertificates.ToList()[0];
            settings.SslSettings.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
            settings.SslSettings.CheckCertificateRevocation = false;
            settings.VerifySslCertificate = false;
            settings.Credentials = new[] { sslcrd };

            MongoClient client = new MongoClient(settings);
            var db = client.ListDatabases().ToList();

我浏览了 MongoDB 服务器日志,我可以看到以下错误

2017-04-10T11:18:21.559+0530 I NETWORK [initandlisten] 连接 接受自 127.0.0.1:53901 #64(现在打开 1 个连接)2017-04-10T11:18:21.559+0530 E NETWORK [conn64] 没有 SSL 证书 由同行提供;连接被拒绝 2017-04-10T11:18:21.560+0530 I NETWORK [conn64] 结束连接 127.0.0.1:53901(现在 0 个连接 打开)

我正在使用 c# MongoDB.Driver 版本 2.3.0 并且 MongoDB 包是 3.2 版本的。

如果您对上述问题有解决方案,请回复。

【问题讨论】:

    标签: mongodb ssl mongodb-.net-driver x509certificate2


    【解决方案1】:

    allowConnectionsWithoutCertificates 的值设置为false。此外,您需要结合证书和密钥文件。

    【讨论】:

    • 嗨 Mahdi,我在 Mongo 服务器中设置了上述属性,我遇到了错误,“2017-04-10T16:09:33.171+0530 I ACCESS [conn49] 无法验证 CN=Client1,O =School,ST=Some-State,C=IN@$external with 机制 MONGODB-X509: AuthenticationFailed: 没有与用户匹配的 x.509 客户端证书。”
    • 同样在 mongo shell 中我们应该在启动它的同时指定 CA pem 文件,但是在 c# 中我没有指定 CA pem 文件(我没有找到任何 api 来指定它),是否有任何 api指定 CA 文件?
    猜你喜欢
    • 2016-03-26
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    相关资源
    最近更新 更多