Вопрос-ответ

Warning about SSL connection when connecting to MySQL database

Предупреждение о SSL-соединении при подключении к базе данных MySQL

С помощью двух приведенных ниже классов я пытался подключиться к базе данных MySQL. Однако я всегда получаю эту ошибку:

Ср. 09 дек. 22:46:52 CET 2015 ПРЕДУПРЕЖДЕНИЕ: Установление SSL-соединения без проверки личности сервера не рекомендуется. Согласно требованиям MySQL 5.5.45+, 5.6.26+ и 5.7.6+, SSL-соединение должно быть установлено по умолчанию, если параметр explicit не установлен. Для соответствия существующим приложениям, не использующим SSL, свойству verifyServerCertificate присвоено значение 'false'. Вам нужно либо явно отключить SSL, установив useSSL=false, либо установить useSSL= true и предоставить truststore для проверки сертификата сервера.

Это тестовый класс с main методом:

public class TestDatabase {

public static void main(String[] args) {
Database db = new Database();
try {
db.connect();
} catch (Exception e) {
e.printStackTrace();
}
db.close();
}
}

Это Database класс:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Database {

private Connection con;

public void connect() throws Exception{

if(con != null) return;

try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new Exception("No database");
}

String connectionURL = "jdbc:mysql://localhost:3306/Peoples";

con = DriverManager.getConnection(connectionURL, "root", "milos23");
}

public void close(){
if(con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Переведено автоматически
Ответ 1

Ваш URL-адрес подключения должен выглядеть следующим образом,

jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false

Это отключит SSL, а также подавит ошибки SSL.

Ответ 2

Как насчет использования SSL, но отключения проверки сервера (например, в режиме разработки на вашем собственном компьютере):

jdbc:mysql://localhost:3306/Peoples?verifyServerCertificate=false&useSSL=true
Ответ 3

Значения по умолчанию для инициирования подключения к серверу MySQL были изменены в недавнем прошлом, и (из беглого просмотра самых популярных вопросов и ответов по stack overflow) новые значения вызывают много путаницы. Хуже всего то, что стандартный совет, похоже, заключается в полном отключении SSL, что является своего рода катастрофой в процессе создания.

Теперь, если ваше соединение действительно не подключено к сети (только localhost) или вы работаете в непроизводственной среде без реальных данных, то будьте уверены: отключение SSL не повредит, если включить опцию useSSL=false.

Для всех остальных требуется следующий набор опций, чтобы заставить SSL работать с сертификатом и проверкой хоста:


  • useSSL= true

  • sslMode=VERIFY_IDENTITY

  • trustCertificateKeyStoreUrl=файл:path_to_keystore

  • trustCertificateKeyStorePassword=пароль

В качестве дополнительного бонуса, поскольку вы уже играете с опциями, также просто отключить слабые протоколы SSL:


  • enabledTLSProtocols=TLSv1.2

Пример

Итак, в качестве рабочего примера вам нужно выполнить следующие общие шаги:

Сначала убедитесь, что у вас есть действительный сертификат, сгенерированный для узла сервера MySQL, и что сертификат CA установлен на клиентском узле (если вы используете самоподписанный, то вам, вероятно, нужно будет сделать это вручную, но для популярных общедоступных центров сертификации он уже будет там).

Затем убедитесь, что хранилище ключей java содержит все сертификаты CA. В Debian / Ubuntu это достигается путем запуска:

update-ca-certificates -f
chmod 644 /etc/ssl/certs/java/cacerts

Затем, наконец, обновите строку подключения, чтобы включить все необходимые параметры, которые в Debian / Ubuntu были бы чем-то вроде (адаптируйте по мере необходимости):

jdbc:mysql://{mysql_server}/confluence?useSSL=true&sslMode=VERIFY_IDENTITY&trustCertificateKeyStoreUrl=file%3A%2Fetc%2Fssl%2Fcerts%2Fjava%2Fcacerts&trustCertificateKeyStorePassword=changeit&enabledTLSProtocols=TLSv1.2&useUnicode=true&characterEncoding=utf8

Ссылка: https://beansandanicechianti.blogspot.com/2019/11/mysql-ssl-configuration.html

Ответ 4

Упомяните url подобное:

jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false

Но в конфигурации xml, когда вы упоминаете & sign, IDE показывает приведенную ниже ошибку:


Ссылка на объект "useSSL" должна заканчиваться разделителем ';'.


И затем вы должны явно использовать & вместо &, который будет определен как & by xml после этого в xml вы должны указать URL-адрес в конфигурации xml следующим образом:

<property name="connection.url">jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&amp;useSSL=false</property>
java