sql >> Databasteknik >  >> RDS >> Mysql

Hur ansluter man till en fjärransluten MySQL-databas via SSL med Play Framework?

Förutsatt att du redan har CA-certifikatinställningen för MySQL-servern (vilket är fallet när du använder Amazon RDS), finns det några steg för att få detta att fungera.

Först bör CA-certifikatet importeras till en Java KeyStore-fil med nyckelverktyg , som följer med JDK. KeyStore kommer i det här fallet att innehålla alla CA-certifikat vi vill lita på. För Amazon RDS kan CA-certifikatet hittas här . Med mysql-ssl-ca-cert.pem i din arbetskatalog kan du köra följande kommando:

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

Vilket kommer att skapa en ny Java KeyStore-fil som heter truststore.jks efter att ha uppmanat dig att ange ett KeyStore-lösenord och fråga om du vill lita på certifikatet (ja, det gör du). Om du redan har en truststore-fil kan du köra samma kommando och ersätta truststore.jks med sökvägen till din befintliga KeyStore (du kommer då att bli tillfrågad om lösenordet för den befintliga KeyStore istället). Jag brukar placera truststore.jks i min conf katalog.

För det andra i application.conf du måste lägga till några JDBC URL-parametrar till databasens URL:

verifyServerCertificate=true - Vägra att ansluta om värdcertifikatet inte kan verifieras.

useSSL=true - Anslut med SSL.

requireSSL=true - Vägra att ansluta om MySQL-servern inte stöder SSL.

Till exempel, om din nuvarande databas-URL är:

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

Då borde det nu vara:

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

Slutligen finns det några kommandoradsalternativ som måste skickas när du startar Play-servern för att konfigurera truststore MySQL-Connector/J kommer att använda. Förutsatt min truststore.jks filen finns i conf katalog, och lösenordet är password , skulle jag starta min server (i dev-läge) så här:

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

Utöver detta vill jag också se till att det är omöjligt att ansluta till databasen utan att använda SSL, ifall alternativen på något sätt blir trassliga på applikationsnivå. Till exempel om db.default.user=root , sedan när du är inloggad som root i MySQL-servern, kör följande frågor:

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


  1. Hur konfigurerar man UTF8-teckenuppsättning i Oracle?

  2. Hur man gör flera frågor till SQL

  3. Hur kopierar man en rad och infogar i samma tabell med ett autoinkrementfält i MySQL?

  4. Ändra visningsformat för datum- och tidsfält i MySQL PHP