首页 > 解决方案 > 无法使用 .NET mysql 连接器连接到 mysql rds 实例

问题描述

我们需要在 mysql rds 实例上启用 TLS1.1 连接。我有一个控制台应用程序,用于测试我与 mysql RDS 实例的连接。

与 Infra 团队多次来回后,确认 mysql 实例使用的是 TLSv1.1。请找到我在 mysql 工作台中运行的命令输出:

SHOW GLOBAL VARIABLES LIKE '%version%';

在此处输入图像描述

在此处输入图像描述

现在这验证了服务器正在使用 TLSv1.1。


连接建立工作 - 工作台

一切正常


连接建立工作 - 使用 mysql.exe (server/bin/)

C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe" -u serverusername -h xxxxxxx.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com dbname -p --ssl-mode=PREFERRED

要求输入密码并正常连接 在此处输入图像描述

C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe" -u serverusername -h xxxxxxx.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com dbname-p --ssl-mode=DISABLED

要求输入密码并正常连接

在此处输入图像描述

所以现在我们有足够的事实可以说,从这个 aws Vm 我们能够使用工作台和 mysql.exe 实用程序连接到 RDS 实例(都启用了 SSL)

然后接下来我们尝试使用控制台应用程序连接到同一个 RDS 实例,该应用程序使用 mysql 团队提供的 mysql 连接器 DLL。请在下面找到应用程序代码以及 mysql 连接器 dll 版本

代码 :

  static void Main(string[] args)
    {

        //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        //ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;



        Console.WriteLine("making certficate connection");

        string connMainOut = connMain();

        Console.WriteLine(connMainOut.ToString());
        Console.ReadLine();

    }

 private static string connMain()
    {
        try
        {
            MySqlConnection connection = new MySqlConnection(ConfigurationManager.AppSettings["conns"]);
            connection.Open();
            return connection.ToString();
        }
        catch (Exception ex)
        {

            Console.WriteLine("==============================");
            Console.WriteLine("connMain" + ex.ToString());
            Console.WriteLine("==============================");
            return "null";
        }
    }

MySql 连接器版本:

在此处输入图像描述

我的 app.config 看起来像这样:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>

    <add key="conns" value="SERVER=xxxxxxxx.xxxxxxxxxxxxx.eu-west-1.rds.amazonaws.com;
database=databasename;
user=username;
PASSWORD=password;
SslMode=PREFERRED;"/>
      </appSettings>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
        </startup>
    </configuration>

它抛出这个错误

在此处输入图像描述

现在使用 SslMode=None;

在此处输入图像描述

现在使用 SslMode=REQUIRED ,我得到同样的错误

在此处输入图像描述

我们已经为此花费了大量时间,但仍然无法使用 TLS 进行连接。如果需要更多信息,请告诉我。

标签: mysqlsslamazon-rdstls1.2mysql-connector

解决方案


从错误日志中它还说“收到的消息是意外的或格式错误的”,这通常意味着服务器上的某些配置错误。TLS 1.1 不再被认为是安全的。

下载IISCrypto以查看“Schannel”和“Cipher Suites”选项卡,查看设置是否正确配置,然后进行更改可以重新启动服务器。

更多参考


推荐阅读