如你所知,有一个
System.Net.Security.RemoteCertificateValidationCallback
在.net中,允许您决定是否信任服务器发送的证书。您可以在sslstream和servicepointmanager中使用它。
现在我尝试在mysql connector/net中使用相同的模式。在mysql服务器端,我设置了一个自签名证书。当我使用这个选项时 SslMode=VerifyCA
在客户端(基于mysql connector/net),由于客户端不信任我的ca,连接失败。
我知道我可以简单地将ca证书添加到客户机的系统信任区,但是这个解决方案是不可移植的。
所以问题是:是否有任何mysql connector/netapi允许用户提供 RemoteCertificateValidationCallback
或者类似的?
非常感谢:)
3条答案
按热度按时间oalqel3c1#
有没有mysql连接器/net api允许用户提供remotecertificatevalidationcallback之类的东西?
不,没有。证书必须为计算机所接受,或者使用未加密的连接。
我知道我可以简单地将ca证书添加到客户机的系统信任区,但是这个解决方案是不可移植的。
如果您需要它是可移植的,则需要从可信的证书颁发机构(如symantec、digicert、geotrust等)获取证书。否则,您只需咬紧牙关将自签名证书添加到连接到db的每台计算机上的证书存储中。
tvz2xvvm2#
正如@bradley grainger所说,在第三方mysqlconnector库中,有一个名为“cacertificatefile”的连接字符串参数,它允许您信任不在系统信任区域中的ca证书。
不幸的是,这个选项在官方的connector/net中不可用。由于某些原因,我无法切换到mysqlconnector库。
所以我在github中分叉了官方的connector/net存储库,并在其中添加了“cacertificatefile”特性,它完美地解决了我的问题。
如果你遇到同样的情况,我相信会有帮助。
看到了吗https://github.com/liuziangexit/mysql-connector-net/commit/d22652036ece49f8d2f48d10b0bdc57f92e22c26,基于官方6.10.8来源。
r7knjye23#
切换到mysqlconnector库,它添加了
CACertificateFile
连接字符串的选项(此处提供更多信息)。使用此设置并为ca证书指定pem文件时,这将使
SslMode=VerifyCA
在连接字符串中具有验证自定义ssl证书所需的效果。