到目前为止,我正试图实现以下目标,但没有成功:
使用Connector / Net从我的WCF服务(Server 2008 R2上的IIS 7.5中的hostet)基于证书的SSL连接到外部MySQL数据库(v5.0)。
托管mysql数据库的人已经发送了三个.pem文件,我使用OpenSSL将其合并为一个.pfx,如Using SSL with MySQL Connector/Net中所述。
但是当我尝试使用基于文件的方法进行连接时,我得到一个异常,告诉我mysql 5.0不支持基于文件的模式。
所以我只剩下一个选择:基于商店的证书 因此,我在“本地计算机”的服务器(托管我的wcf服务)上安装了证书,并将其添加到“个人证书”中。然后在调整连接字符串以包含
之后"SSL Mode=Required;Certificate Store Location=LocalMachine;"
我再次测试了一些我们认可的身份验证/凭据错误。
在谷歌搜索之后,我发现可能存在对证书访问权限不足的问题。所以我按照here解释的步骤,使用WinHttpCertCfg工具授予帐户“NetworkService”的访问权限,我认为该帐户用于托管我的服务。
不幸的是,我仍然遇到以下异常:
Message: Out of sync with server
Source: MySql.Data
Type: MySql.Data.MySqlClient.MySqlException
StackTrace:
bei MySql.Data.MySqlClient.NativeDriver.ReadOk(Boolean read)
bei MySql.Data.MySqlClient.NativeDriver.AuthenticateNew(Boolean reset)
bei MySql.Data.MySqlClient.NativeDriver.Authenticate(Boolean reset)
bei MySql.Data.MySqlClient.NativeDriver.Open()
bei MySql.Data.MySqlClient.Driver.Open()
bei MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
bei MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
bei MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
bei MySql.Data.MySqlClient.MySqlPool.GetConnection()
bei MySql.Data.MySqlClient.MySqlConnection.Open()
bei System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
bei System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
bei System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
bei AtlasService.AtlasService.getChildNodes(UInt32 nid, Language lang, Boolean withEmpty, DateFormats format)
有谁知道这里的问题是什么,或者我做错了什么? 任何帮助都会大大减少。 提前致谢
/编辑:我应该补充一点,我使用mysql命令行工具和工作台(使用单独的.pem文件)成功测试了ssl连接
答案 0 :(得分:0)
好几个小时的挫折后我找到了解决办法 似乎连接器/ net lib的最新版本(v6.4.3)或ssl与使用中的connector / net lib和mysql服务器版本的组合存在问题。
将连接器/ net lib降级到v6.3.7后,一切正常。