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

Paw*_*zyk 3 c# mysql connection ssl

我正在使用 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\'@\'%\''
Run Code Online (Sandbox Code Playgroud)

所以我假设,这个用户不能在没有 SSL 的情况下登录?我对吗?

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

"server=127.0.0.1;uid=logowanie;pwd=log1;database=ewidencja;SslMode=Required";
Run Code Online (Sandbox Code Playgroud)

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

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

sas*_*alm 6

/sf/answers/3262669161/发布我的回答:

您可以从 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)}");
}
Run Code Online (Sandbox Code Playgroud)