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