当前位置: 首页 > 知识库问答 >
问题:

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

谭嘉歆
2023-03-14

我正在使用MySQL。来自MySQL官方网站的NET连接器。我正在尝试从我的C#程序到Mysql db建立安全的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=Required”选项。是否可以在没有任何其他SSL选项的情况下进行SSL加密连接?

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

共有3个答案

帅彦
2023-03-14

Opensslhttps://www.openssl.org/附带一个名为“s_client”的工具,可用于测试SSL服务器。这适用于*nix、cygwin和Win32。

示例用法

$openssl s_客户端-连接服务器名:port-CAfile/path/to/ca。pem-调试-showcerts

有无数的选项,例如-pence、-state等,您可能会发现这些选项对于通过SSL的设置和拆卸来跟踪SSL很有用。

安全

正如米尔扬所指出的那样,使用Wireshark。

以下是Wireshark的一些提示

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

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

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

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

有关测试,请参阅https://www.owasp.org/index.php/Testing_for_SSL-TLS_(OWASP-CM-001)

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

阎渝
2023-03-14

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

安装Wireshark,捕获流量,您将百分之百确定它是否加密。

凌宏大
2023-03-14

发布我的答案https://stackoverflow.com/a/46609559/492336:

您可以从MySqlConnection内部执行此SQL语句:显示会话状态,如“Ssl\u 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)}");
}

 类似资料:
  • 我试图确保在db容器启动并准备接受连接之前,我的应用程序容器不会运行迁移/启动。 所以我决定使用healthcheck并依赖于docker compose file v2中的选项。 在应用程序中,我有以下内容 另一方面,db有以下健康检查 我尝试了一些方法,比如: 确保创建了db目录 获取mysql版本: Ping管理员(将db容器标记为正常,但似乎不是有效的测试) 有人有解决办法吗?

  • 我们使用.Net MySql Connector的v6.9.9使用此连接字符串访问MySql,指定需要SSL。 我们的DBA已经启用了对SSL的支持,但在测试期间,无论我的机器上是否安装了证书,也不管我是否具有“SSL模式=必需”都可以连接到服务器。 然而,当我的DBA禁用SSL时,如果我使用上述连接字符串,我会得到一个错误,即SSL未启用。 因此,我真的不知道我的网络流量是否被加密。如何验证?

  • 问题内容: 如何检查a 是否被选中? 问题答案: 使用isSelected方法。 您还可以使用ItemListener,以便在选中或取消选中它时收到通知。

  • 问题内容: 你如何检查是否可以通过Java连接到Internet?一种方法是: 但是是否有更合适的方法来执行该任务,特别是如果你需要经常进行连续检查并且很有可能断开互联网连接时? 问题答案: 你应该连接到实际应用程序需要的地方。否则,你要测试是否与某个无关的地方(在这种情况下为Google)建立了连接。 特别是,如果你要尝试与Web服务进行通信,并且要控制该Web服务,则最好使用某种廉价的“获取状

  • 问题是没有捕捉到此异常。尽管MongoDB引发以下异常: com.mongodb.mongosocketOpenException:在com.mongodb.Connection.socketstream.open(socketstream.java:63)在com.mongodb.Connection.internalstreamConnection.open(internalstreamCon

  • 我认为我的问题类似于C#:如何检查MySqlConnection是否使用SSL?,但不幸的是,它没有好的答案,因为可能不清楚。所以我的看法是: 我创建了一个新连接: 如何验证它使用SSL,是否有类似? 编辑: 我尝试使用类似“Ssl\u cipher”的显示会话状态,但这给了我Ssl\u cipher,即使Ssl模式=必需: 我使用的代码是: 根据https://dev.mysql.com/doc