java - 为什么 jdbc mysql 连接器可以在没有任何 ssl 选项的情况下连接 SSL 所需的服务器?
问题描述
我在 Amazon RDS 上配置了需要 SSL 的 MySQL 服务器,就像这样
GRANT USAGE ON *.* TO 'myusername'@'%' REQUIRE SSL;
我确认只有在给出 ssl 选项时才能使用 mysql cli 连接服务器。
# ok
mysql -D xxx -uxxx -hxxx.rds.amazonaws.com -P3306 --ssl-ca=path/to/rds-ca-2019-root.pem --ssl-verify-server-cert -p
# connection error
mysql -D xxx -umyusername-hxxx.rds.amazonaws.com -P3306 -p
但是,我可以使用 JDBC mysql 连接器连接服务器,而无需任何 ssl 选项。
var con = DriverManager.getConnection("jdbc:mysql://xxx.rds.amazonaws.com:3306/xxx",
"myusername",
"<password>");
var rs = con
.prepareStatement("show status like 'Ssl_cipher'")
.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(1)); // Ssl_cipher
System.out.println(rs.getString(2)); // AES256-SHA
}
为什么这是可能的?
解决方案
我发现mysql连接器默认跳过服务器证书的验证。显式传递 verifyServerCertificate=true 会导致连接失败。
推荐阅读
- android-studio - 真正的 Admob 添加未显示在我的 Android 应用程序上
- c# - 从 Bot 类外部访问 BotState 变量
- scala - 如何在 Flink 1.7.1 Session Windows 中使用窗口状态
- powerbi - 在 Power BI 中通过使用 Dax 查找两行之间的差异
- mongodb - MongoDB 从文件执行查询并测量时间
- html - 如何在 EJS 中的表格中排列特定单元格中的数据
- xml - 如何使用 Python 中的 ElementTree 删除带有 iterparse 的 XML 部分?
- angular - Primeng 4.3:数据表列值'S','N'到'Yes''No'
- c - 他们如何在 fstat 系统调用中传递其他参数而不是 st_buffer
- python - 使用 Python 和 Selenium 从具有可扩展表格的网站中提取表格内容