如何使用 MongoDB.Driver 和证书文件通过 TLS 连接到服务器?

How to connect to a server via TLS using MongoDB.Driver with a certificate file?

根据 MongoDB 文档,应该可以通过 TLS 连接,您可以通过 tlsCAFile 参数指定 pem 证书。

但是我无法以成功的方式使用客户端。

[不能将证书安装到本地存储]

无论我做了什么,客户提供的所有错误都是通用的 A timeout occured after 30000ms... + The remote certificate is invalid according to the validation procedure。我已经通过向 MongoDB 管理工具明确提供证书来验证服务器可以访问。

最终偶然发现了解决方案:

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 进行无验证,或者对于完整验证,您可以将证书加载到内存中并验证指纹匹配以及有效的到期日期。