c# - 如何使用带有证书文件的 MongoDB.Driver 通过 TLS 连接到服务器?
问题描述
根据 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
或完全验证,您可以将证书加载到内存中并验证指纹匹配以及到期日期是否有效。
推荐阅读
- c# - C# 事件/接口 - 无需订阅使用该接口的每个类即可获取回调
- c# - 使用动态参数对 post 方法进行单元测试
- c++ - strchr 用于多个字符?
- java - 从 XHTML 模板生成 PDF
- python - 为什么 hash() 方法在 Python 中返回带有 int 的短 Hash 值?
- scala - 将库依赖项添加到 SBT,用于 SBT(不是 SBT 管理的项目)
- android - Firebase 消息服务未调用,但仅调用一次
- haskell - 访问元组的某些元素
- android - 在我的 Android 应用程序中找不到 Google 客户端机密
- php - 从特定行开始 mysqli_fetch_array