sql >> Database >  >> RDS >> Mysql

Hoe verbinding maken met een externe MySQL-database via SSL met Play Framework?

Ervan uitgaande dat u de CA-certificaatconfiguratie voor de MySQL-server al hebt (wat het geval is bij het gebruik van Amazon RDS), zijn er een paar stappen om dit te laten werken.

Eerst moet het CA-certificaat worden geïmporteerd in een Java KeyStore-bestand met behulp van keytool , die bij de JDK wordt geleverd. De KeyStore bevat in dit geval alle CA-certificaten die we willen vertrouwen. Voor Amazon RDS is het CA-certificaat hier te vinden . Met mysql-ssl-ca-cert.pem in uw werkmap kunt u het volgende commando uitvoeren:

keytool -import -alias mysqlServerCACert -file mysql-ssl-ca-cert.pem -keystore truststore.jks

Dat zal een nieuw Java KeyStore-bestand maken met de naam truststore.jks nadat u wordt gevraagd om een ​​KeyStore-wachtwoord in te voeren en te vragen of u het certificaat wilt vertrouwen (ja, dat doet u). Als u al een truststore-bestand heeft, kunt u dezelfde opdracht uitvoeren, waarbij u truststore.jks vervangt met het pad naar uw bestaande KeyStore (u wordt dan gevraagd om het wachtwoord van de bestaande KeyStore). Ik plaats meestal truststore.jks in mijn conf directory.

Ten tweede, in application.conf je moet een paar JDBC URL-parameters toevoegen aan de database-URL:

verifyServerCertificate=true - Weiger verbinding te maken als het hostcertificaat niet kan worden geverifieerd.

useSSL=true - Maak verbinding via SSL.

requireSSL=true - Weiger verbinding te maken als de MySQL-server geen SSL ondersteunt.

Als uw huidige database-URL bijvoorbeeld is:

db.default.url="jdbc:mysql://url.to.database/test_db"

Dan zou het nu moeten zijn:

db.default.url="jdbc:mysql://url.to.database/test_db?verifyServerCertificate=true&useSSL=true&requireSSL=true"

Ten slotte zijn er enkele opdrachtregelopties die moeten worden doorgegeven bij het starten van de Play-server om de truststore te configureren die MySQL-Connector/J zal gebruiken. Uitgaande van mijn truststore.jks bestand bevindt zich in de conf directory, en het wachtwoord is password , zou ik mijn server (in dev-modus) als volgt starten:

activator run -Djavax.net.ssl.trustStore="conf/truststore.jks" -Djavax.net.ssl.trustStorePassword="password"

Daarnaast wil ik er ook voor zorgen dat het onmogelijk is om verbinding te maken met de database zonder SSL te gebruiken, voor het geval de opties op de een of andere manier in de war raken op applicatieniveau. Bijvoorbeeld als db.default.user=root , dan wanneer ingelogd als root voer in de MySQL-server de volgende query's uit:

GRANT USAGE ON *.* TO 'root'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;


  1. Hoe installeer ik postgres met NSIS met alle parameters?

  2. Getallen opmaken in MySQL

  3. MySql-exportschema zonder gegevens

  4. Een handvat krijgen voor native Oracle Connection in Hibernate 4 om een ​​opgeslagen proces uit te voeren