如何检查MySQL连接是否使用SSL加密?

3
我正在使用 MySQL 官方网站提供的 MySQL .NET 连接器。我试图从我的 C# 程序安全地建立与 Mysql 数据库的 SSL 连接。Mysql 服务器允许使用 SSL 连接。变量 have_ssl 被设置为 yes,并且指定了 ca-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加密的? 如何检查此连接是否100%确保了SSL加密?


1
尝试这个Stackoverflow链接,它看起来是你正在寻找的东西:https://dev59.com/p1bUa4cB1Zd3GeqPCNTF - MethodMan
好的,但这并没有解决我的问题。我想知道如果我的连接实例只有一个选项:“SslMode=Required”,它是否提供SSL加密?这是否可能,还是这个连接仍然没有SSL?如何检查呢? - Paweł Adamczyk
你能在你的连接字符串中检查或添加以下内容吗:Encrypt=True;TrustServerCertificate=True - MethodMan
1
你对“required”这个词的意思可能有些模糊。 - Sammitch
正如您所看到的,我的连接字符串中有SslMode=Required。此外,我使用Encrpt=True进行了检查,并且它可以工作。但是,这是否意味着连接一定是加密的?我甚至没有指定客户端证书和密钥的路径! - Paweł Adamczyk
显示剩余2条评论
4个回答

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

1
这是一个好答案。Ssl_cipher提供了连接中使用的密码算法,如果未使用SSL,则为空字符串,如https://dev.mysql.com/doc/refman/5.7/en/x-plugin-monitoring-status-variables.html#statvar_Mysqlx_ssl_cipher所述。我建议您将“GetString(0)”更改为“GetString(1)”,因为Ssl_cipher的值在第二列中给出。 - Carlos Pérez Chávez
@CarlosPérezChávez 已完成。感谢您的建议。 - sashoalm

3

我如何确认这个连接是否是100%的SSL加密?

安装 Wireshark,捕获流量,你就可以百分之百确定它是否被加密。


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协议,而不是顶层应用程序协议。

0
在CLI上,您可以运行此命令来检查数据是否已加密。 sudo tcpdump -l -i eth0 -w - src or dst port 3306 | strings

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接