Za předpokladu, že již máte nastavený certifikát CA pro server MySQL (což je případ, kdy používáte Amazon RDS), existuje několik kroků, aby to fungovalo.
Nejprve by měl být certifikát CA importován do souboru Java KeyStore pomocí keytool
, který je dodáván s JDK. KeyStore v tomto případě bude obsahovat všechny certifikáty CA, kterým chceme důvěřovat. Pro Amazon RDS lze certifikát CA nalézt zde
. Pomocí mysql-ssl-ca-cert.pem
ve svém pracovním adresáři můžete spustit následující příkaz:
keytool -import -alias mysqlServerCACert -file mysql-ssl-ca-cert.pem -keystore truststore.jks
Což vytvoří nový soubor Java KeyStore s názvem truststore.jks
poté, co vás vyzve k zadání hesla KeyStore a zeptáte se, zda chcete certifikátu důvěřovat (ano, chcete). Pokud již máte soubor důvěryhodného úložiště, můžete spustit stejný příkaz a nahradit truststore.jks
s cestou k vašemu stávajícímu KeyStore (místo toho budete vyzváni k zadání hesla existujícího KeyStore). Obvykle umisťuji truststore.jks
v mém conf
adresář.
Za druhé, v application.conf
k URL databáze musíte přidat několik parametrů URL JDBC:
verifyServerCertificate=true
- Odmítnout připojení, pokud hostitelský certifikát nelze ověřit.
useSSL=true
- Připojte se pomocí SSL.
requireSSL=true
- Odmítněte se připojit, pokud server MySQL nepodporuje SSL.
Pokud je například adresa URL vaší aktuální databáze:
db.default.url="jdbc:mysql://url.to.database/test_db"
Pak by to nyní mělo být:
db.default.url="jdbc:mysql://url.to.database/test_db?verifyServerCertificate=true&useSSL=true&requireSSL=true"
A konečně, existuje několik možností příkazového řádku, které je třeba předat při spouštění serveru Play, aby bylo možné nakonfigurovat úložiště důvěryhodnosti, které MySQL-Connector/J použije. Za předpokladu, že můj truststore.jks
soubor se nachází v conf
adresář a heslo je password
, Spustil bych svůj server (v režimu pro vývojáře) takto:
activator run -Djavax.net.ssl.trustStore="conf/truststore.jks" -Djavax.net.ssl.trustStorePassword="password"
Kromě toho se také rád ujišťuji, že není možné se připojit k databázi bez použití SSL, pro případ, že by se možnosti na aplikační úrovni nějak zvrtly. Například pokud db.default.user=root
a poté při přihlášení jako root
na serveru MySQL spusťte následující dotazy:
GRANT USAGE ON *.* TO 'root'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;