首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查MySqlConnection是否使用SSL

检查MySqlConnection是否使用SSL
EN

Stack Overflow用户
提问于 2017-10-06 09:10:05
回答 2查看 895关注 0票数 0

我认为我的问题类似于C#:如何检查MySqlConnection是否使用SSL?,但不幸的是,它没有很好的答案,因为它可能不清楚。所以我的看法是:

我创建了一个新的连接:

代码语言:javascript
复制
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

我使用的代码是:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2017-10-06 14:53:30

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

我会试着看看连接字符串。这里有一个解决方案来演示这一点。

代码语言:javascript
复制
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}");
票数 0
EN

Stack Overflow用户

发布于 2017-10-06 15:52:43

原来我没有打印查询的第二列,这现在起作用了:

代码语言:javascript
复制
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_cipher: AES256-SHA表示SSL Mode=RequiredSsl_cipher:打印SSL Mode=None。另一方面,我得到了Ssl_cipher: AES256-SHA,即使SSL Mode完全丢失了,所以在默认情况下可能是开着的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46602255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档