如何检查一个MySQL连接是否SSL加密?(How to check whether a MySQL

2019-07-18 09:09发布

我使用的是从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 =必需”选项。 是否有可能让没有任何其他的SSL选项SSL加密连接?

而且用户能够登录并做出一些选择命令table1 。 所以我认为这个连接是SSL加密? 我怎么可以检查此连接是否SSL加密的100%确定?

Answer 1:

我怎么可以检查此连接是否SSL加密的100%确定?

安装Wireshark的 ,捕捉到的交通,你会被它100%肯定,无论是加密。



Answer 2:

OpenSSL的https://www.openssl.org/附带一个名为可用于测试SSL服务器“的s_client.First”工具。 这是适用于* nix中,Cygwin的,和Win32。

用法示例

$的OpenSSL的s_client.First -connect服务器名称:端口-CAfile /path/to/ca.pem -debug -showcerts

还有的选项,如-pause,通态等,这些你可能会发现通过其建立和拆除跟踪SSL有用万千。

安全

使用Wireshark的Miljen指出。

这里是Wireshark的一些技巧

  1. 收集使用Wireshark的交通
  2. 验证数据包的内容看起来就像是随机噪声(随机字节)。
  3. 此输出应足以检查是否已开启SSL。

如果你正在寻找测试你的SSL代码是否正常工作,你也可以检查您是否可以与其他SSL实现互操作。

你有没有硬编码的服务器的公钥正确,或者正确检查服务器证书,以确保它符合你的服务器,而不是一些冒名顶替的? 你是否启用客户端验证? 您是否设置密码套件可以接受的名单以合理的方式? 你使用TLS 1.2? 您是否知道TLS只有固定的沟通渠道,但你仍然需要确保端点是安全的,例如,从各种恶意攻击?

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

为了测试看https://www.owasp.org/index.php/Testing_for_SSL-TLS_%28OWASP-CM-001%29

此链接包含伟大的东西存在,但它绝不是详尽。 这些测试的对象是针对HTTPS,但他们应该对任何SSL实施工作,因为它正在分析SSL协议,而不是在顶部的应用层协议。



Answer 3:

从发布我的回答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)}");
}


文章来源: How to check whether a MySQL connection is SSL encrypted?