在 C# 中使用 SSL 连接到 MySQL

Posted

技术标签:

【中文标题】在 C# 中使用 SSL 连接到 MySQL【英文标题】:Connect to MySQL using SSL in C# 【发布时间】:2018-03-14 13:05:39 【问题描述】:

我正在使用mysqlConnection 连接到需要 SSL 的 MySQL 服务器:

var connection = new MySqlConnection("Data Source=127.0.0.1;Database=MyDb1;User Id=root;Password=blabla;encrypt=true");

如果服务器不需要 SSL,这会成功,但在服务器上执行 GRANT USAGE ON *.* TO 'root'@'localhost' REQUIRE SSL; 后,它开始失败:

ProviderIncompatibleException:提供程序未返回 ProviderManifestToken 字符串。 ---> MySql.Data.MySqlClient.MySqlException:使用方法“mysql_native_password”对用户“root”的主机“127.0.0.1”进行身份验证失败,并显示消息:用户“root”@“localhost”的访问被拒绝(使用密码:是) ---> MySql.Data.MySqlClient.MySqlException: Access denied for user 'root'@'localhost' (using password: YES)

如何启用 SSL?应该在连接字符串中添加一些内容还是以编程方式完成?

【问题讨论】:

【参考方案1】:

好的,经过一番搜索,我在How determine if using SSL in a MySql Connection?找到了答案。

我必须在连接字符串中添加 SSL Mode=Required 而不是 encrypt=true

var connection = new MySqlConnection("Data Source=127.0.0.1;Database=MyDb1;User Id=root;Password=blabla;SSL Mode=Required");

现在我遇到了一个新错误 - MySql.Data.MySqlClient.MySqlException: “The host localhost does not support SSL connections.”,但我想我会解决的。

【讨论】:

【参考方案2】:

var connection = new MySqlConnection("Data Source=127.0.0.1;Database=MyDb1;User Id=root;Password=blabla;SSL Mode=None");

对我来说工作得很好......

【讨论】:

对于任何寻找这个问题的答案的人来说,这不是它。如您所见,问题是如何使用 SSL,而不是如何禁用它。 当它简单地忽略 SSL 时,它是如何定位在顶部的【参考方案3】:

您可以在连接字符串中使用它。

 SSL Mode=0

【讨论】:

以上是关于在 C# 中使用 SSL 连接到 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

C#:如何在启用 SSL 的情况下连接到 Active Directory?

启用 SSL 的网站无法连接到本地 C# Web 套接字服务器

如何在不实际安装连接器的情况下通过 C# 使用 mysql 连接器连接到 mysql

C# 客户端通过 SSL 连接到 Java 服务器

如何通过 SSL 连接到 Amazon RDS?

通过 SSL 将 phpMyAdmin 连接到 MySQL 服务器