我认为我的问题类似于C#:如何检查MySqlConnection是否使用SSL?,但不幸的是,它没有很好的答案,因为它可能不清楚。所以我的看法是:
我创建了一个新的连接:
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
发布于 2017-10-06 14:53:30
您可以查看单词"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}");发布于 2017-10-06 15:52:43
原来我没有打印查询的第二列,这现在起作用了:
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=Required,Ssl_cipher:打印SSL Mode=None。另一方面,我得到了Ssl_cipher: AES256-SHA,即使SSL Mode完全丢失了,所以在默认情况下可能是开着的。
https://stackoverflow.com/questions/46602255
复制相似问题