MySQL .NET SSL访问被拒绝异常

时间:2019-11-25 08:12:05

标签: c# mysql .net

使用MySQL连接器版本8.0.18,我尝试使用SSL证书连接到数据库。

我无法这样做,因为此代码:

MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder();
builder.Server = "server";
builder.Port = 3307;
builder.Database = "databse";
builder.UserID = "user";
builder.Password = "************";
builder.SslMode = MySqlSslMode.Required;
builder.SslCa = "ca.pem";
builder.SslCert = "client-cert.pem";
builder.SslKey = "client-key.pem";
MySqlConnection conn = new MySqlConnection(builder.ToString());
conn.Open();

引发以下异常:

  

MySql.Data.MySqlClient.MySqlException:使用方法“ mysql_native_password”对用户“ s-ce.client”的主机“ s-ce.srv.rxe.pl”进行身份验证失败,并显示以下消息:用户“ user”的访问被拒绝'@'服务器'(使用密码:是)'

我已将文件ca.pem,client-cert.pem和client-key.pem放在应用程序可执行文件所在的目录中。

使用MySQL Workbench,我可以使用相同的参数和来自同一台PC的pem文件连接到该数据库。

有什么作用?

更新

正如评论中所建议的那样,我已使用选择的密码将PEM文件转换为单个PFX证书。我能够连接更新代码(仅相关的更改行):

builder.SslMode = MySqlSslMode.Required;
builder.CertificateFile = "client-cert.pfx";
builder.CertificatePassword = "************";
MySqlConnection conn = new MySqlConnection(builder.ToString());

1 个答案:

答案 0 :(得分:1)

使用PEM文件进行相互身份验证不适用于Connector / NET(MySql.Data);这是一个已知的错误:bug 97738

有两种解决方法:

  1. 使用openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -certfile ca.pem -out client.pfx将客户端证书和密钥文件转换为PFX文件。
  2. 切换到https://www.nuget.org/packages/MySqlConnector/,它正确支持PEM文件(和fixes many other bugs)。