Подключение приложения Springboot к серверу MySQL по протоколу ssl

#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>