Mysql
 sql >> Database >  >> RDS >> Mysql

Come connettersi a un database MySQL remoto tramite SSL utilizzando Play Framework?

Supponendo che tu abbia già la configurazione del certificato CA per il server MySQL (come avviene quando si utilizza Amazon RDS), ci sono alcuni passaggi per farlo funzionare.

Innanzitutto, il certificato CA deve essere importato in un file Java KeyStore utilizzando strumento chiavi , fornito con JDK. Il KeyStore in questo caso conterrà tutti i certificati CA di cui vogliamo fidarci. Per Amazon RDS, il certificato CA è disponibile qui . Con mysql-ssl-ca-cert.pem nella tua directory di lavoro, puoi eseguire il seguente comando:

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

Ciò creerà un nuovo file Java KeyStore chiamato truststore.jks dopo aver chiesto di inserire una password KeyStore e aver chiesto se si desidera considerare attendibile il certificato (sì, lo fai). Se hai già un file truststore, puoi eseguire lo stesso comando, sostituendo truststore.jks con il percorso del tuo KeyStore esistente (ti verrà quindi richiesta la password del KeyStore esistente). Di solito inserisco truststore.jks nel mio conf directory.

Secondo, in application.conf è necessario aggiungere alcuni parametri URL JDBC all'URL del database:

verifyServerCertificate=true - Rifiuta di connetterti se non è possibile verificare il certificato host.

useSSL=true - Connessione tramite SSL.

requireSSL=true - Rifiuta di connetterti se il server MySQL non supporta SSL.

Ad esempio, se l'URL del database corrente è:

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

Quindi ora dovrebbe essere:

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

Infine, ci sono alcune opzioni della riga di comando che devono essere passate all'avvio del server di riproduzione per configurare il truststore che MySQL-Connector/J utilizzerà. Supponendo che il mio truststore.jks il file si trova in conf directory e la password è password , Vorrei avviare il mio server (in modalità dev) in questo modo:

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

Oltre a questo, mi piace anche assicurarmi che sia impossibile connettersi al database senza utilizzare SSL, nel caso in cui le opzioni in qualche modo vengano incasinate a livello di applicazione. Ad esempio se db.default.user=root , quindi una volta effettuato l'accesso come root nel server MySQL, esegui le seguenti query:

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