无法使用 .NET mysql 连接器连接到 mysql rds 实例

cannot connect to mysql rds instance using .NET mysql connector

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

在与 Infra 团队多次交流后,确认 mysql 实例正在使用 TLSv1.1。请在 mysql workbench :

中找到我有 运行 的命令输出

SHOW GLOBAL VARIABLES LIKE '%version%';

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


连接建立工作 - Workbench

一切正常


连接建立工作 - 使用 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

要求输入密码并正常连接

所以现在我们有足够的事实表明我们可以使用 workbench 和 mysql.exe 实用程序(均启用 SSL)从这个 aws Vm 连接到 RDS 实例

接下来我们尝试使用控制台应用程序连接到同一个 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 进行连接。如果需要更多信息,请告诉我。

错误日志中还显示 "The message received was unexpected or badly formatted",这通常意味着服务器上的配置有误。 TLS 1.1 不再被认为是安全的。

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

More Reference