如何检查MySQL连接是否经过SSL加密?

时间:2013-01-17 23:17:42

标签: c# mysql ssl connection

我正在使用MySQL官方网站上的MySQL .NET连接器。我正在尝试从我的C#程序到Mysql数据库建立安全的SSL连接。 Mysql服务器允许连接SSL。 have_ssl变量设置为yesca-certserver-certserver-key已指定。

用户的权限是:

'GRANT USAGE ON *.* TO \'logowanie\'@\'%\' IDENTIFIED BY PASSWORD \'*...\' REQUIRE SSL'
'GRANT SELECT ON `db`.`table1` TO \'logowanie\'@\'%\''

所以我假设这个用户没有SSL就无法登录?我是对的吗?

我在C#程序中的连接字符串如下所示:

"server=127.0.0.1;uid=logowanie;pwd=log1;database=ewidencja;SslMode=Required";

看到此连接字符串没有任何证书文件路径!它只有“SSLMode = Required”选项。是否可以在没有任何其他SSL选项的情况下进行SSL加密连接?

用户可以在table1上登录并进行一些选择命令。所以我假设这个连接是SSL加密的? 如何检查此连接是否经过SSL加密才能100%确定?

3 个答案:

答案 0 :(得分:3)

  

如何检查此连接是否已SSL加密为100%   确定吗?

安装Wireshark,捕获流量,您将100%确定它是否已加密。

答案 1 :(得分:1)

Openssl https://www.openssl.org/附带一个名为" s_client"的工具。可用于测试SSL服务器。这适用于* nix,cygwin和Win32。

样本用法

$ openssl s_client -connect servername:port -CAfile /path/to/ca.pem -debug -showcerts

有许多选项,例如-pause,-state等,您可能会发现这些选项对于通过设置和拆卸来跟踪SSL非常有用。

安全

正如Miljen指出的那样使用Wireshark。

以下是wireshark的一些提示

  1. 使用Wireshark收集流量
  2. 验证数据包的内容看起来像随机噪声(随机字节)。
  3. 此输出应足以检查您是否已启用SSL。
  4. 如果您正在考虑测试您的SSL代码是否正常运行,您还可以检查是否可以与其他SSL实施进行互操作。

    您是否正确地对服务器的公钥进行了硬编码,或正确检查服务器证书以确保它对应于您的服务器而不是某些冒名顶替者?你启用了客户端验证吗?您是否以合理的方式设置了可接受的密码套件列表?你使用TLS 1.2吗?您是否知道TLS仅保护通信通道,但您仍需要确保端点是安全的,例如来自各种恶意攻击?

    这可能会让你开始测试这里有一些提示

    有关测试,请参阅https://www.owasp.org/index.php/Testing_for_SSL-TLS_%28OWASP-CM-001%29

    此链接包含很多内容,但并非详尽无遗。这些测试适用于HTTPS,但它们应该适用于任何SSL实现,因为它正在分析SSL协议,而不是顶层的应用程序级协议。

答案 2 :(得分:1)

https://stackoverflow.com/a/46609559/492336发布我的答案:

您可以从MySqlConnection内部执行此SQL语句:SHOW SESSION STATUS LIKE 'Ssl_cipher',它将显示连接是否已加密。

示例代码:

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)}");
}