Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak połączyć się ze zdalną bazą danych MySQL przez SSL za pomocą Play Framework?

Zakładając, że masz już konfigurację certyfikatu CA dla serwera MySQL (co ma miejsce w przypadku korzystania z Amazon RDS), istnieje kilka kroków, aby to zadziałało.

Najpierw certyfikat CA należy zaimportować do pliku Java KeyStore przy użyciu klucz , który jest dostarczany z JDK. Magazyn kluczy w tym przypadku będzie zawierał wszystkie certyfikaty CA, którym chcemy ufać. W przypadku Amazon RDS certyfikat CA można znaleźć tutaj . Z mysql-ssl-ca-cert.pem w swoim katalogu roboczym możesz uruchomić następujące polecenie:

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

Który utworzy nowy plik Java KeyStore o nazwie truststore.jks po wyświetleniu monitu o podanie hasła KeyStore i pytanie, czy chcesz zaufać certyfikatowi (tak, masz). Jeśli masz już plik truststore, możesz uruchomić to samo polecenie, zastępując truststore.jks ze ścieżką do istniejącego magazynu kluczy (zamiast tego zostanie wyświetlony monit o hasło do istniejącego magazynu kluczy). Zwykle umieszczam truststore.jks w moim conf katalog.

Po drugie, w application.conf musisz dodać kilka parametrów adresu URL JDBC do adresu URL bazy danych:

verifyServerCertificate=true - Odmów połączenia, jeśli nie można zweryfikować certyfikatu hosta.

useSSL=true - Połącz za pomocą SSL.

requireSSL=true - Odmów połączenia, jeśli serwer MySQL nie obsługuje SSL.

Na przykład, jeśli aktualny adres URL bazy danych to:

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

W takim razie powinno być teraz:

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

Na koniec istnieje kilka opcji wiersza poleceń, które należy przekazać podczas uruchamiania serwera Play, aby skonfigurować plik truststore, którego będzie używać MySQL-Connector/J. Zakładając, że mój truststore.jks plik znajduje się w conf katalogu, a hasło to password , uruchomiłbym serwer (w trybie deweloperskim) w ten sposób:

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

Oprócz tego lubię się upewnić, że nie można połączyć się z bazą danych bez użycia SSL, na wypadek, gdyby opcje zostały jakoś pomieszane na poziomie aplikacji. Na przykład, jeśli db.default.user=root , a następnie po zalogowaniu się jako root na serwerze MySQL uruchom następujące zapytania:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Eksportuj listę ładnych permalinków i tytuł posta

  2. FindByUUID() przy użyciu repozytorium JPA Spring Data

  3. Jak mogę WYBRAĆ wiersze z MAX (wartość kolumny), PARTITION według innej kolumny w MYSQL?

  4. Kodowanie znaków JDBC

  5. Przestaw wiersz MySQL na dynamiczną liczbę kolumn