Java использует SSL для подключения к базе данных
В настоящее время я подключаюсь к своей базе данных без использования SSL. Теперь я хочу использовать SSL. Как я его настроил, мой источник базы данных находится в config.
DB_SOURCE=jdbc:mysql://myDatabaseInfo:3306/DB_NAME?
DB_USER=dbUser
DB_PW=dbPw
Я могу заставить SSL-соединение работать, вызывая мою программу со следующими аргументами
-Djavax.net.ssl.trustStore=path\to\truststore
-Djavax.net.ssl.trustStorePassword=myPassword
Я также могу заставить его работать, изменяя переменные env в самом коде
dbSource += "?useSSL=true";
System.setProperty("javax.net.ssl.trustStore", "path\to\truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "myPassword");
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(dbSource, dbUser, dbPw);
Однако моя цель - сделать SSL-соединение без внесения каких-либо изменений в мой код и без необходимости изменять аргументы VM, которые я использую. Есть ли способ, которым я могу указать источник, чтобы включить эту информацию?
Что-то вроде:
jdbc:mysql://myDatabaseInfo:3306/DB_NAME?useSSL=true&trustCertificateKeyStoreUrl=path\to\truststore&trustCertificateKeyStorePassword=myPassword
Я пробовал это точно, и он не работает, в идеале я мог бы просто добавить информацию в конфигурацию, которую у меня уже есть, чтобы мне не приходилось вносить изменения в несколько мест. Любые идеи?
Ответы
Ответ 1
Предложение 1: разместить хранилище доверенных сертификатов вместо хранилища доверия Java или импортировать сертификат в хранилище доверия java: ${java.home}/lib/security/cacerts
Предложение 2: Напишите свой собственный драйвер, расширяющий com.mysql.jdbc.Driver
. Поместите конфигурацию SSL в новый код. Хотя вам нужно кодировать, но не в основном приложении. Не уверен, что это приемлемо для вас.
Ответ 2
Согласно разделу безопасности документации MySQLConnector, trustCertificateKeyStoreUrl
принимает входной URL.
То есть вы должны префикс его с помощью file:
, чтобы заставить его работать для локальных файлов. Другими словами, вам нужно установить путь к вашему доверенному хранилищу как file:path\to\truststore
.
То же самое относится к clientCertificateKeyStoreUrl
, если вы тоже используете этот параметр.