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

与Infra团队进行了多次接触后,可以确定mysql实例正在使用TLSv1.1。请找到我在mysql工作台中运行的命令输出:

SHOW GLOBAL VARIABLES LIKE '%version%';

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


显示像'%ssl%'这样的全局变量


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

现在,这将验证服务器正在使用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

询问密码并连接正常
mysql - 无法使用.NET mysql连接器连接到mysql rds实例-LMLPHP

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

询问密码并连接正常

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

因此,现在我们有足够的事实可以说,通过此aws Vm,我们可以使用workbench和mysql.exe实用程序(均已启用SSL)连接到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连接器版本:

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

我的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>


它抛出此错误

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

现在使用SslMode = None;

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

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

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

我们已经花了很多时间,但仍然无法使用TLS连接。如果需要更多信息,请告诉我。

最佳答案

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

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

More Reference

关于mysql - 无法使用.NET mysql连接器连接到mysql rds实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53653006/

10-12 16:28
查看更多