【问题标题】:How to add a custom SSL verification to MySql Connector/NET如何向 MySql Connector/NET 添加自定义 SSL 验证
【发布时间】:2018-10-08 03:43:03
【问题描述】:

如你所知,有一个

System.Net.Security.RemoteCertificateValidationCallback

在 .NET 中允许您决定是否信任服务器发送的证书。您可以在 SslStream 和 ServicePointManager 中使用它。

现在我尝试在 MySql Connector/NET 期间使用相同的模式。在 MySql 服务器端,我设置了一个自签名证书。当我在客户端使用SslMode=VerifyCA 选项时(基于 MySql 连接器/NET),连接失败,因为我的 CA 在客户端不受信任。

我知道我可以简单地将 CA 证书添加到客户端的系统信任区,但这个解决方案不可移植。

所以问题是:是否有任何 MySql Connector/NET API 允许用户提供 RemoteCertificateValidationCallback 或类似的东西?

非常感谢:)

【问题讨论】:

    标签: c# mysql .net ssl ssl-certificate


    【解决方案1】:

    是否有任何 MySql 连接器/NET API 允许用户提供 RemoteCertificateValidationCallback 或类似的东西?

    不,没有。证书必须是机器可接受的,或者您使用未加密的连接。

    我知道我可以简单地将 CA 证书添加到客户端的系统信任区,但这个解决方案不可移植。

    如果您需要它是可移植的,您需要从赛门铁克、DigiCert、GeoTrust 等受信任的证书颁发机构获得证书。否则,您只需要硬着头皮添加自签名cert 到连接到数据库的每台计算机上的证书存储区。

    【讨论】:

    • 这是事实!我刚刚浏览了 MySql 连接器的源代码,并且有一个固定的内部 RemoteCertificateValidationCallback 对 API 用户是不可见的,所以你是对的!
    【解决方案2】:

    切换到MySqlConnector library,这会将CACertificateFile 选项添加到connection string(更多信息here)。

    当您使用此设置并为 CA 证书指定 PEM 文件时,这将使您的连接字符串中的 SslMode=VerifyCA 具有验证您的自定义 SSL 证书所需的效果。

    【讨论】:

    • 是的,我注意到 MySqlConnector 库正是我想要的,但问题是我的项目不是基于纯连接器代码,我使用的是 linq2db 库。如果我切换到 MySqlConnector,我需要基于 MySqlConnector 编写一个新的 linq2db DataProvider...无论如何,感谢您的帮助!
    【解决方案3】:

    正如@bradley-grainger 所说,在第 3 方 MySqlConnector 库中,有一个名为“CACertificateFile”的连接字符串参数,它允许您信任不在系统信任区域中的 CA 证书。

    很遗憾,这个选项在官方的 Connector/NET 中不可用。由于某些原因,我无法切换到 MySqlConnector 库。

    所以我只是在github中fork了官方的Connector/NET存储库,并在其中添加了“CACertificateFile”功能,它完美地解决了我的问题。

    如果你遇到同样的情况,相信会有所帮助。

    参见https://github.com/liuziangexit/mysql-connector-net/commit/d22652036ece49f8d2f48d10b0bdc57f92e22c26,基于官方 6.10.8 源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      相关资源
      最近更新 更多