sql >> Databáze >  >> RDS >> Mysql

Jak se připojit ke vzdálené databázi MySQL přes SSL pomocí Play Framework?

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;


  1. Jak můžete pojmenovat tabulky datové sady, které vracíte v uloženém procesu?

  2. Jak echo náhodné řádky z databáze?

  3. Váš dokonalý průvodce SQL Join:INNER JOIN – Část 1

  4. Mohu provést výběr, aktualizaci a odstranění mysql v jednom dotazu?