3

我正在使用来自 MySQL 官方网站的 MySQL .NET 连接器。我正在尝试建立从我的 C# 程序到 Mysql 数据库的安全 SSL 连接。Mysql 服务器允许使用 SSL 连接。have_ssl变量被设置为yesca-certserver-cert并且server-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% 确定?

4

3 回答 3

8

从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)}");
}
于 2017-10-06T22:00:57.103 回答
3

如何检查此连接是否经过 SSL 加密以 100% 确定?

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

于 2013-01-18T07:30:47.010 回答
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。

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

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

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

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

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

于 2015-11-30T13:27:36.967 回答