#java #mysql #spring-boot #ssl
#ява #mysql — сервер #пружинный ботинок #ssl #java #весенняя загрузка
Вопрос:
Мне нужно подключить мое приложение Spring boot к удаленному серверу my sql server, который работает по протоколу ssl. Я использую JPA в своем приложении. Я прочитал о ssl и требуемых сертификатах, а также о том, что мне понадобится MySQL Conector / J для установления соединения. Мне просто было интересно, какой подход мне следует выбрать, поскольку я полный новичок и не могу найти эффективный tuturiol через Интернет. Любое объяснение было бы высоко оценено.
Ответ №1:
Ссылка здесь:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-configuration-properties.html (Прокрутите немного вниз до раздела безопасности)
В основном вам нужен формат PKCS12 / JKS сертификата вашего приложения и сертификата CA сервера. Затем добавьте его в URL-адрес JDBC.
Пример: В application.yml
предположим, что мы используем формат PKCS12, используем SSL и проверяем CA сервера. Предположим, что имя файла сертификата клиента (приложения) равно client-cert.p12
, а имя файла сертификата CA — server-ca.p12
.
spring:
datasource:
url: >
jdbc:mysql://{DATABASE_IP}/{DATABASE_NAME}?
useSSL=trueamp;
requireSSL=trueamp;
clientCertificateKeyStoreUrl=file://{SOME_DIRECTORY}/client-cert.p12amp;
clientCertificateKeyStoreType=PKCS12amp;
clientCertificateKeyStorePassword={KEY_STORE_PASSWORD}
verifyServerCertificate=trueamp;
trustCertificateKeyStoreUrl=file://{SOME_DIRECTORY}/server-ca.p12amp;
trustCertificateKeyStoreType=PKCS12amp;
trustCertificateKeyStorePassword={KEY_STORE_PASSWORD}
username: {USERNAME}
password: {PASSWORD}
При использовании JKS формат файла обычно является jks
, а тип — JKS
. Если вам не нужно проверять CA, установите, verifyServerCertificate = false
и вам не нужны trustCertificateKeyStore
материалы (последние 3 строки)
Комментарии:
1. Я полагаю, мне нужно отправить какой-то запрос на получение сертификата CA сервера, после чего я могу использовать его для настройки. Как запросить этот сертификат и как сохранить его в нашем магазине?
2. Вам необходимо запросить у владельца / администратора вашего сервера файлы сертификатов. Сервер БД также должен хранить те же файлы ключей. Мы, люди, вручную копируем ключевые файлы.
3. Что, если владелец хранит сертификат в каком-либо онлайн-каталоге, могу ли я передать «URL» в свойствах приложения для сертификата?
4. Я думаю, просто измените
file://
наhttp://
, но я никогда не пробовал это раньше
Ответ №2:
Если вам удалось получить сертификат клиента, clientkeystore.jks в приведенном ниже выражении вы можете указать приведенный ниже URL-адрес и подключиться:
spring.datasource.url=jdbc:mysql://XXXX:3306/mydatabase?useUnicode=trueamp;characterEncoding=UTF-8amp;characterSetResults=UTF-8amp;verifyServerCertificate=trueamp;useSSL=trueamp;requireSSL=trueamp;clientCertificateKeyStoreUrl=file:/opt/clientkeystore.jksamp;clientCertificateKeyStorePassword=mypassamp;trustCertificateKeyStoreUrl=file:/opt/truststore.jksamp;trustCertificateKeyStorePassword=mypass
Комментарии:
1. Хорошо, как взаимодействовать с сервером для получения сертификата клиента, а также хранилища ключей и где и как хранить этот сертификат после получения?
2. получив сертификат, у вас есть несколько вариантов: 1) Импортировать сертификат сервера в cacerts, присутствующий в jdk по адресу $ JAVA_HOME/lib /security /cacerts 2) или предоставить его в качестве аргумента вашей java-программе с помощью -Djavax.net.ssl.trustStore=<path_to_truststore> -Djavax.net.ssl.trustStorePassword=<truststore_password>