我使用的是从MySQL官方网站的MySQL .NET连接器。 我试图让从我的C#程序到MySQL数据库安全的SSL连接。 MySQL服务器允许使用SSL连接。 have_ssl
变量设置为yes
和ca-cert
, server-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 =必需”选项。 是否有可能让没有任何其他的SSL选项SSL加密连接?
而且用户能够登录并做出一些选择命令table1
。 所以我认为这个连接是SSL加密? 我怎么可以检查此连接是否SSL加密的100%确定?
我怎么可以检查此连接是否SSL加密的100%确定?
安装Wireshark的 ,捕捉到的交通,你会被它100%肯定,无论是加密。
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的一些技巧
- 收集使用Wireshark的交通
- 验证数据包的内容看起来就像是随机噪声(随机字节)。
- 此输出应足以检查是否已开启SSL。
如果你正在寻找测试你的SSL代码是否正常工作,你也可以检查您是否可以与其他SSL实现互操作。
你有没有硬编码的服务器的公钥正确,或者正确检查服务器证书,以确保它符合你的服务器,而不是一些冒名顶替的? 你是否启用客户端验证? 您是否设置密码套件可以接受的名单以合理的方式? 你使用TLS 1.2? 您是否知道TLS只有固定的沟通渠道,但你仍然需要确保端点是安全的,例如,从各种恶意攻击?
这可能让你开始进行测试这里有一些提示
为了测试看https://www.owasp.org/index.php/Testing_for_SSL-TLS_%28OWASP-CM-001%29
此链接包含伟大的东西存在,但它绝不是详尽。 这些测试的对象是针对HTTPS,但他们应该对任何SSL实施工作,因为它正在分析SSL协议,而不是在顶部的应用层协议。
从发布我的回答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)}");
}