c# - MySQL .NET SSL 访问被拒绝异常

标签 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: 'Authentication to host 's-ce.srv.rxe.pl' for user 's-ce.client' using method 'mysql_native_password' failed with message: Access denied for user 'user'@'server' (using password: YES)'

我已将文件 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());

最佳答案

使用 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 将客户端证书和 key 文件转换为 PFX 文件.
  2. 切换到https://www.nuget.org/packages/MySqlConnector/ ,它正确支持 PEM 文件(和 fixes many other bugs )。

关于c# - MySQL .NET SSL 访问被拒绝异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59027497/

相关文章:

c# - UWP、XAML - 使 CheckBox 为空

c# - 列表中的最大日期时间

C#正则表达式查找注解

mysql - 无法在分配的表中添加外键约束

c# - 例如,是否有一些 .NET 机器学习库可以为问题建议标签?

c# - 尝试显示 ListView 中的默认选定值

java - struts2 阻止其他用户执行某个操作

php - Laravel 删除或更新不起作用

c# - 如何在 MVVM View 模型中处理 C# WPF 线程

c# - 服务器客户端发送/接收简单文本