如何将自定义SSL验证添加到MySql Connector / NET

时间:2018-10-08 03:43:04

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

如您所知,有一个

System.Net.Security.RemoteCertificateValidationCallback
.NET中的

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

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

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

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

非常感谢:)

3 个答案:

答案 0 :(得分:2)

  

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

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

  

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

如果您需要这种便携式产品,则需要从受信任的证书颁发机构(例如Symantec,DigiCert,GeoTrust等)获取证书。否则,您只需要在添加自签名上狠下功夫证书连接到连接数据库的每台计算机上的证书存储。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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

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

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