当前位置: 首页 > 知识库问答 >
问题:

无法使用来自c的x509证书身份验证连接到MongoDB服务器#

谷梁弘深
2023-03-14

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

接下来,我尝试连接到相同的服务器form 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网络[initandlisten]连接已从127.0.0.1:53901#64(1个连接现已打开)接受2017-04-10T11:18:21.559 0530 E网络[conn64]对等方未提供SSL证书;连接被拒绝2017-04-10T11:18:21.560 0530 I网络[conn64]结束连接127.0.0.1:53901(0个连接现在打开)

我用的是c#MongoDB。驱动程序版本2.3.0和MongoDB包是版本3.2。

如果你有以上问题的解决方案,请回复。

共有1个答案

阚砚文
2023-03-14

allowConnectionsWithoutCertificates的值设置为false。此外,还需要将证书和密钥文件组合在一起。

 类似资料:
  • 我有一个 Docker 容器,其中包含一个服务,该服务需要连接到 Vault 以检索机密以运行该服务。我的容器正在运行 Linux CentOS 在Docker容器中运行的entrypoint.sh脚本中,我尝试使用Vault CLI检索Vault机密,然后使用AWS身份验证进行身份验证。 来自多克文件的相关代码: entrypoint.sh相关代码 注意:$AWS_访问_密钥_ID、$AWS_机

  • 问题内容: 是否可以做类似的事情: 在JAVA中类似于MongoVUE或其他基于SQL的数据库的身份验证方法。 在那里,身份验证是在连接数据库实例期间完成的。 我在MongoClient Java文档中看不到适当的实例方法 而在这样的认证(可选)官方文档 不符合我的目标,因为它需要更改应用程序中所有现在不使用身份验证的现有查询方法。 使用Java驱动程序对MongoDB进行身份验证的方式完全符合我

  • 问题内容: 我试图连接到http://bluesql.net上的mySQL数据库,但是当我尝试连接时,出现此错误: 我已经研究过了,它与MySQL 4.1之前使用的一些旧密码方案有关。较新的版本可以选择使用旧密码,我已阅读过此密码可能会导致此问题。 我正在运行php 5.3,并与mySQLi(新的mysqli(…))连接。我希望我可以在代码中做一些事情以连接到bluesql.net上的数据库- 显

  • 我无法连接到mongo v2。6使用x509证书从Java/Groovy进行身份验证。我已经用ssl构建了mongo,感觉它配置正确。 我们的项目有两个连接Mongo的应用程序——一个是用NodeJS编写的,另一个是用Java/Groovy编写的。NodeJS项目能够使用X509证书和查询成功地进行身份验证。此外,我还可以通过指定ssl并在命令行上提供PEM文件来支持mongo。但是,我无法使用J

  • 问题内容: 是否有人对如何使用HTTPClient 4.0.1通过x509证书执行客户端身份验证有任何友好的提示? 感谢您的时间。 问题答案: 这是一些代码,助您一臂之力。该是包含客户端证书的对象。如果服务器使用的是自签名证书,或者包含的cacerts文件中的JVM认可的不是CA所签名的证书,则需要使用。否则,要使用默认的cacerts文件,请传递给truststore参数。

  • 我想在讲Grails的REST中设置基于证书的登录身份验证。 按照Burt Beckwith的文档,我使用Spring Security插件(spring-security-core:2.0-RC3)来设置X509身份验证: 生成证书文件和Tomcat配置似乎有点棘手,但已经在另一个答案中指出。我这样做了,并使用当前标准配置Tomcat 7,首先是keystoreFile、keystorePass