我正在mysql 客户端中寻找一种可能性,以仅测试--ssl-mode=REQUIRED
给定指令是否--host
100% 得到保证,而不会潜在地破坏通过 Internet 以明文形式显示的用户名、密码和数据库名称。使用如下参数运行该模式--ssl--check-handshake-only-then-disconnect-and-report
:
这是关于一个人的网络主机的场景:
- 没有关于服务器上 SSL 可用性的适当/可用/可靠的文档,
- 和/或不能或只能复杂地访问 mysql 服务器及其配置信息。
到目前为止,经过我的研究,我认为不可能进行 100% 无风险的 SSL/TLS 握手测试运行,这显然是无风险的,因为它无需提供用户名、密码和数据库名称即可运行。
--ssl-mode=REQUIRED的文档非常简单明了地解决了这个问题:
必需:如果服务器支持加密连接,则建立加密连接。如果无法建立加密连接,则连接尝试失败。
只需相信 mysql 客户端(又名“shell”)它确实按该顺序运行:
- 确保
--ssl-mode=REQUIRED
在给定情况下有效,否则会过早退出并显示明确的错误消息。 - 只有当握手和加密协商顺利进行时,客户端才会提交提供的用户名、密码和数据库名称。
- 并且没有新的开发人员会在该条件检查中引入错误......
对于了解并信任他们的 mysql 客户端和设置的精通/日常用户来说,这可能就足够了。
但对于真正需要 100% 无风险检查的新用户或需要怀疑的人来说,这不是最佳选择。
一个真正的“无风险连接/握手测试模式”显然是无风险的,因为它也可以在不提交任何具体凭据的情况下工作,这将是非常令人放心的。
- 在我在https://bugs.mysql.com注册并在那里提交功能请求之前
- 我在这里问一下,是否有我不知道的可能性。
如果您只是想测试客户端在无法建立 SSL 时抛出错误,那么一种快速而肮脏的方法是将这两者结合起来:
--ssl-cipher SEED-SHA
您应该始终看到“SSL 失败”而不是“密码错误”的错误。尝试
--ssl-mode=REQUIRED
打开和关闭以验证它是抛出错误还是回退到明文。如果你想检查服务器是否支持 SSL(以及支持到什么程度),那么像 nmap 这样的东西会更好。确保你有一个更新版本的 nmap,然后使用类似这样的东西来检查 SSL 状态,例如:
如果不出意外,您始终可以使用数据包捕获/wireshark 验证连接是否在 SSL 之前发送凭据,尽管它有一个学习曲线。
就像你提到的,如果你可以与控制服务器的人一起工作,这很简单,选项如下:
但这并不总是可能的
结果
nmap
- 这感觉就像是完成这项工作的合适工具!与and
mysql
组合的结果--ssl-cipher
--ssl-mode