首页 > 解决方案 > 为什么 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
    }

为什么这是可能的?

标签: javamysqlamazon-web-servicessslamazon-rds

解决方案


我发现mysql连接器默认跳过服务器证书的验证。显式传递 verifyServerCertificate=true 会导致连接失败。


推荐阅读