Sie bereits den CA-Zertifikat-Setup für den MySQL-Server Unter der Annahme, (was der Fall ist bei der Verwendung von Amazon RDS), gibt es ein paar Schritte, um dies zu machen Arbeit.
Zuerst sollte das CA-Zertifikat in eine Java KeyStore-Datei importiert werden, die keytool verwendet, die mit dem JDK geliefert wird. Der KeyStore enthält in diesem Fall alle CA-Zertifikate, denen wir vertrauen möchten. Für Amazon RDS kann das CA-Zertifikat here gefunden werden. Mit mysql-ssl-ca-cert.pem
in Ihrem Arbeitsverzeichnis können Sie den folgenden Befehl ausführen:
keytool -import -alias mysqlServerCACert -file mysql-ssl-ca-cert.pem -keystore truststore.jks
, die eine neue Java-Schlüsselspeicherdatei truststore.jks
nach dem Sie aufgefordert genannt erstellen ein Kennwort für Schlüsselspeicher und fragen eingeben, wenn Sie das Zertifikat vertrauen wollen (ja , Sie machen). Wenn Sie bereits eine Truststore-Datei haben, können Sie denselben Befehl ausführen, indem Sie truststore.jks
durch den Pfad zu Ihrem vorhandenen KeyStore ersetzen (Sie werden dann stattdessen zur Eingabe des Kennworts für den vorhandenen KeyStore aufgefordert). Normalerweise platziere ich truststore.jks
in meinem Verzeichnis conf
.
Zweitens in application.conf
Sie benötigen einige JDBC-URL-Parameter an die Datenbank-URL hinzuzufügen:
verifyServerCertificate=true
- eine Verbindung verweigern, wenn das Host-Zertifikat nicht überprüft werden kann.
useSSL=true
- Verbindung über SSL herstellen.
requireSSL=true
- Verbindung verweigern, wenn der MySQL-Server SSL nicht unterstützt.
Zum Beispiel, wenn Ihre aktuelle Datenbank-URL ist:
db.default.url="jdbc:mysql://url.to.database/test_db"
Dann sollte es nun sein:
db.default.url="jdbc:mysql://url.to.database/test_db?verifyServerCertificate=true&useSSL=true&requireSSL=true"
Schließlich gibt es einige Kommandozeilenoptionen, die weitergegeben werden müssen, wenn Starten Sie den Play-Server, um den Truststore zu konfigurieren, den MySQL-Connector/J verwenden wird. Unter der Annahme, meine truststore.jks
Datei wird im conf
Verzeichnis befindet, und das Kennwort ist password
, würde ich meine Server starten (in dev-Modus) wie folgt aus:
activator run -Djavax.net.ssl.trustStore="conf/truststore.jks" -Djavax.net.ssl.trustStorePassword="password"
Zusätzlich dazu, Ich mag auch machen Sicher, dass es unmöglich ist, eine Verbindung zur Datenbank herzustellen, ohne SSL zu verwenden, nur für den Fall, dass die Optionen auf Anwendungsebene irgendwie durcheinander geraten.Zum Beispiel, wenn db.default.user=root
, dann, wenn sie als root
im MySQL-Server angemeldet, führen Sie die folgenden Abfragen:
GRANT USAGE ON *.* TO 'root'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;
Hinweis: Dies ist nicht spezifisch Framework zu spielen, eher eine allgemeinen Java/MySQL Sache –