【发布时间】:2020-03-20 11:44:03
【问题描述】:
使用 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”进行身份验证失败,并显示消息:用户“用户的访问被拒绝” '@'server'(使用密码:YES)'
我已将文件 ca.pem、client-cert.pem 和 client-key.pem 放在 app 可执行文件所在的同一目录中。
使用 MySQL Workbench,我能够在同一台 PC 上使用相同的参数和 pem 文件连接到该数据库。
什么给了?
更新
按照 cmets 的建议,我已将 PEM 文件转换为带有选择密码的单个 PFX 证书。我能够连接更新代码(仅相关的更改行):
builder.SslMode = MySqlSslMode.Required;
builder.CertificateFile = "client-cert.pfx";
builder.CertificatePassword = "************";
MySqlConnection conn = new MySqlConnection(builder.ToString());
【问题讨论】:
-
它不依赖于 SSL ,因为它说它没有通过身份验证。
-
您是从 MySQL Workbench 登录的,您是从与您的 MySQL 实例相同的服务器上登录的吗?
-
@Fourat Workbench 和 .NET 应用程序在同一台 PC 上运行。数据库服务器在另一台 PC 上。
-
@rob_tokarski 您确定您的 SSL 证书路径正确吗?您是否已将证书密码添加到
MySqlConnectionStringBuilder?检查这个stackoverflow.com/questions/39031412/… -
使用选择的密码将 pem 文件转换为 pfx 后,我似乎能够在应用程序中连接到数据库(连接状态为打开)。路径与 pem 文件相同(文件名明显不同),所以 MySql 连接器似乎并不真正支持 pem?