如何使用MongoDB.Driver通过TLS连接到服务器?

50few1ms  于 2022-11-22  发布在  Go
关注(0)|答案(2)|浏览(172)

根据MongoDB文档,应该可以通过TLS连接,其中通过tlsCAFile参数指定pem证书。
然而,我一直不能以这样一种方式使用客户端,它是成功的。
[无法将证书安装到本地存储区]
不管我做了什么,客户端提供的所有错误都是一个通用的A timeout occured after 30000ms... + The remote certificate is invalid according to the validation procedure。我已经通过显式地向MongoDB管理工具提供证书来验证服务器是可以访问的。

vnjpjtjt

vnjpjtjt1#

最终偶然发现了一个解决办法:

var clientSettings = MongoClientSettings.FromUrl(new MongoUrl(mongoUrl));

clientSettings.UseTls = true;
clientSettings.SslSettings = new SslSettings
{
    EnabledSslProtocols = SslProtocols.Tls11,
    ServerCertificateValidationCallback = (sender, certificate, chain, errors) =>
        certificate.Subject.Contains("O=myOU,")
};

这是一个比较松散的验证,但足以满足我的需要。您可以使用=> true进行无验证,或者将证书加载到内存中进行完全验证,并验证指纹是否匹配沿着到期日期是否有效。

n53p2ov0

n53p2ov02#

我在连接到AWS-DocumentDB(与MongoDB兼容)时也遇到过同样的问题,经过几个小时的努力,Chris的答案完美地工作了。
我只是做了一个小的更改,只是为了验证证书颁发者是否是亚马逊。

clientSettings.SslSettings = new SslSettings
{
    EnabledSslProtocols = SslProtocols.Tls11,
    ServerCertificateValidationCallback = (sender, certificate, chain, errors) =>
        certificate.Issuer.Contains("CN=Amazon")
};

相关问题