Ответ 1
Предполагая, что у вас уже есть настройка сертификата CA для сервера MySQL (что имеет место при использовании Amazon RDS), есть несколько шагов, чтобы сделать эту работу.
Сначала сертификат CA должен быть импортирован в файл Java KeyStore с помощью keytool, который поставляется вместе с JDK. KeyStore в этом случае будет содержать все сертификаты CA, которым мы хотим доверять. Для Amazon RDS сертификат CA можно найти здесь. С mysql-ssl-ca-cert.pem
в вашем рабочем каталоге вы можете запустить следующую команду:
keytool -import -alias mysqlServerCACert -file mysql-ssl-ca-cert.pem -keystore truststore.jks
Что создаст новый файл Java KeyStore под названием truststore.jks
после запроса ввести пароль KeyStore и просить, хотите ли вы доверять сертификату (да, вы это делаете). Если у вас уже есть файл доверия, вы можете запустить ту же команду, заменив truststore.jks
на путь к существующему KeyStore (вместо этого вам будет предложено ввести пароль существующего KeyStore). Обычно я помещаю truststore.jks
в мой каталог conf
.
Во-вторых, в application.conf
вам нужно добавить несколько URL-адресов JDBC в URL-адрес базы данных:
verifyServerCertificate=true
- Отказать в подключении, если сертификат хоста не может быть проверен.
useSSL=true
- Подключиться через SSL.
requireSSL=true
- Отказать в подключении, если сервер MySQL не поддерживает SSL.
Например, если ваш текущий URL-адрес базы данных:
db.default.url="jdbc:mysql://url.to.database/test_db"
Тогда это должно быть:
db.default.url="jdbc:mysql://url.to.database/test_db?verifyServerCertificate=true&useSSL=true&requireSSL=true"
Наконец, есть несколько параметров командной строки, которые должны быть переданы при запуске сервера воспроизведения для настройки Truststore MySQL-Connector/J. Предполагая, что мой файл truststore.jks
находится в каталоге conf
, а пароль password
, я бы начал свой сервер (в режиме dev) следующим образом:
activator run -Djavax.net.ssl.trustStore="conf/truststore.jks" -Djavax.net.ssl.trustStorePassword="password"
В дополнение к этому, я также хочу убедиться, что невозможно подключиться к базе данных без использования SSL, на всякий случай, когда параметры каким-то образом перепутались на уровне приложения. Например, если db.default.user=root
, а затем, зарегистрировавшись как root
на сервере MySQL, выполните следующие запросы:
GRANT USAGE ON *.* TO 'root'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;