Почему jdbc mysql connector может подключать сервер, требующий SSL, без какой-либо опции ssl?

#java #mysql #amazon-web-services #ssl #amazon-rds

#java #mysql #amazon-web-services #ssl #amazon-rds

Вопрос:

Я настроил сервер MySQL на Amazon RDS с обязательным использованием SSL, вот так

 GRANT USAGE ON *.* TO 'myusername'@'%' REQUIRE SSL;
  

и я подтвердил, что могу подключить сервер с помощью mysql cli только тогда, когда указаны параметры ssl.

 # 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 connector без какой-либо опции 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
    }
  

Почему это возможно?

Ответ №1:

Я выяснил, что соединитель mysql пропускает проверку сертификата сервера по умолчанию. Явная передача verifyServerCertificate= true приводит к сбою соединения.