Ако приемем, че вече имате настройката на CA сертификата за MySQL сървъра (какъвто е случаят, когато използвате Amazon RDS), има няколко стъпки, за да накарате това да работи.
Първо, CA сертификатът трябва да бъде импортиран във файл на Java KeyStore с помощта на инструмент за ключ
, който идва с 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, можете да изпълните същата команда, като замените truststore.jks
с пътя до съществуващия ви KeyStore (вместо това ще бъдете подканени за паролата на съществуващия KeyStore). Обикновено поставям truststore.jks
в моя conf
директория.
Второ, в application.conf
трябва да добавите няколко параметра на JDBC URL към 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"
И накрая, има няколко опции от командния ред, които трябва да се предадат при стартиране на сървъра на Play, за да се конфигурира хранилището за доверие, което MySQL-Connector/J ще използва. Ако приемем моя truststore.jks
файлът се намира в conf
директория, а паролата е password
, бих стартирал моя сървър (в режим на разработка) по следния начин:
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;