【问题标题】:cannot connect to mysql rds instance using .NET mysql connector无法使用 .NET mysql 连接器连接到 mysql rds 实例
【发布时间】:2018-12-06 13:56:14
【问题描述】:

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

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

SHOW GLOBAL VARIABLES LIKE '%version%';

  • 显示全局变量,如“%ssl%”

现在验证服务器使用的是 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 实用程序(均启用 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 连接器版本:

我的 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 进行连接。如果需要更多信息,请告诉我。

【问题讨论】:

    标签: mysql ssl amazon-rds tls1.2 mysql-connector


    【解决方案1】:

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

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

    More Reference

    【讨论】:

    • “在服务器上配置错误”是指在 RDS 实例上设置错误?此外,我们知道它不再安全,但问题是当我尝试连接 TLS1.2 但无法使其工作时遇到完全相同的错误,所以我们认为这可能是由于 TLSv1.2 导致的。 2.但我想我们做错了什么。说了这么多,我的主要困惑是,如果 RDS 实例配置有任何问题,那么 mysql.exe 如何能够在没有任何警告或错误的情况下连接到它。
    • SChannel 取决于操作系统,如果配置不正确或配置为仅使用最新的 TLS/SSL 版本,可能会导致 TLS/SSL 协商出现问题。我是说,请验证我在您的 VM 的最后一步中提到的设置,而不是 RDS 实例。 RDS 刚刚生成了 SSL,.Net 使用 SChannel.dll 作为底层 SSL/TLS 实现
    • 我将更新对我有帮助的内容。在 IIS Crypto 中使用最佳实践非常重要。我们关闭了一些密码,因为一些 webapp 扫描安全工具引起了人们对这些密码不安全的担忧。这真是一个愚蠢的错误\
    猜你喜欢
    • 2013-05-05
    • 1970-01-01
    • 2015-04-30
    • 2021-04-02
    • 2015-06-24
    • 1970-01-01
    • 2019-10-07
    • 2021-04-17
    • 1970-01-01
    相关资源
    最近更新 更多