首页 > 解决方案 > MySQL .NET SSL 访问被拒绝异常

问题描述

使用 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”进行身份验证失败,并显示消息:用户“用户”@ 的访问被拒绝服务器'(使用密码: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());

标签: c#mysql.net

解决方案


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

有两种解决方法:

  1. 使用 . 将客户端证书和密钥文件转换为 PFX 文件openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -certfile ca.pem -out client.pfx
  2. 切换到https://www.nuget.org/packages/MySqlConnector/,它确实正确支持 PEM 文件(并修复了许多其他错误)。

推荐阅读