如何将自定义 SSL 验证添加到 MySql 连接器/NET



如你所知,有一个

System.Net.Security.RemoteCertificateValidationCallback

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

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

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

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

非常感谢:)

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

不,没有。要么证书必须为计算机所接受,要么您使用未加密的连接。

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

如果您需要便携,则需要从受信任的证书颁发机构(如Symantec,DigiCert,GeoTrust等(获取证书,否则,您只需咬紧牙关将自签名证书添加到连接到数据库的每台计算机上的证书存储中即可。

切换到 MySqlConnector 库,这会向连接字符串添加CACertificateFile选项(有关详细信息,请参阅此处(。

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

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

不幸的是,此选项在官方连接器/NET 中不可用。由于某些原因,我无法切换到MySqlConnector库。

所以我只是在github中分叉了官方的连接器/NET存储库,并为其添加了"CACertificateFile"功能,它完美地解决了我的问题。

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

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

最新更新