【问题标题】:Check if MySqlConnection is using SSL检查 MySqlConnection 是否使用 SSL
【发布时间】:2017-10-06 09:10:05
【问题描述】:

我认为我的问题类似于C#: how to check if a MySqlConnection is using SSL or not?,但不幸的是它没有很好的答案,因为可能不清楚。所以这是我的看法:

我创建了一个新连接:

var connection = new MySqlConnection("Data Source=example.com;Port=3306;Database=Foo;User Id=root;Password=foo;SSL Mode=Required");

如何验证它是否使用 SSL,是否有类似 connection.IsOverSSL 的内容?

编辑:

我尝试使用SHOW SESSION STATUS LIKE 'Ssl_cipher',但这给了我Ssl_cipher,即使SSL Mode=Required

我使用的代码是:

var connection = new MySqlConnection(ConfigurationManager.AppSettings["Test"]);
connection.Open();
var command = new MySqlCommand("SHOW SESSION STATUS LIKE \'Ssl_cipher\'", connection);
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    Console.WriteLine(reader.GetString(0));
}

根据https://dev.mysql.com/doc/refman/5.7/en/using-encrypted-connections.html,应该给我Ssl_cipher | DHE-RSA-AES128-GCM-SHA256

【问题讨论】:

标签: c# mysql ssl


【解决方案1】:

原来我没有打印查询的第二列,现在可以了:

var connection = new MySqlConnection(ConfigurationManager.AppSettings["Test"]);
connection.Open();
var command = new MySqlCommand("SHOW SESSION STATUS LIKE \'Ssl_cipher\'", connection);
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
    Console.WriteLine($"{reader.GetString(0)}: {reader.GetString(1)}");
}

它为SSL Mode=Required 打印Ssl_cipher: AES256-SHA,为SSL Mode=None 打印Ssl_cipher:。另一方面,即使SSL Mode 完全丢失,我也会得到Ssl_cipher: AES256-SHA,所以它可能默认开启。

【讨论】:

    【解决方案2】:

    您可以查看“SSL”一词的连接字符串。这将让您知道您的 IDbConnection 在这种情况下是否使用 ssl。有关可用于 MySql 的连接字符串列表,请访问ConnectionStrings.com。如果这能解决您的问题,请告诉我。

    我会尝试查看连接字符串。这是一个证明这一点的解决方案。

    var connStr = "Data Source=example.com;Port=3306;Database=Foo;User Id=root;Password=foo;SSL Mode=Required";
    var sslElement = connStr.Split(';')
        .SingleOrDefault(s => s.StartsWith("SSL", StringComparison.InvariantCultureIgnoreCase));
    
    var sslModeEnabled = (sslElement != null 
        && string.Equals(sslElement.Split('=')[1].Trim(), "None", StringComparison.InvariantCultureIgnoreCase) == false);
    
    
    Console.WriteLine($"SSL Mode Enabled: {sslModeEnabled}");
    

    【讨论】:

    • 我的问题是我不信任连接字符串 - 如果“SSL 一词”无效怎么办?你怎么知道它有什么作用?也许它不被尊重。
    • 不信任连接字符串是什么意思? MySql 的连接字符串必须是某种格式正确吗?这是参考Chapter 6 Connector/Net Connection-String Options Reference。根据他们自己的文档,您只有三个名称选项。 SSL 模式、SslMode 和 Ssl 模式。这三个都有“SSL”这个词。另一种选择是拆分';'字符并找到 SSL 元素并查找要验证的值。这有帮助吗?
    • 我的连接字符串已经有SSL Mode=Required。我的问题不是那个。我不确定标志本身是否有效,所以我想独立验证连接实际上是 SSL。
    猜你喜欢
    • 1970-01-01
    • 2016-08-25
    • 2011-07-03
    • 1970-01-01
    • 2012-08-02
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    相关资源
    最近更新 更多