Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да се свържа с отдалечена база данни MySQL чрез SSL с помощта на Play Framework?

Ако приемем, че вече имате настройката на CA сертификата за MySQL сървъра (какъвто е случаят, когато използвате Amazon RDS), има няколко стъпки, за да накарате това да работи.

Първо, CA сертификатът трябва да бъде импортиран във файл на Java KeyStore с помощта на инструмент за ключ , който идва с JDK. KeyStore в този случай ще съдържа всички CA сертификати, на които искаме да вярваме. За Amazon RDS сертификатът за CA може да бъде намерен тук . С mysql-ssl-ca-cert.pem във вашата работна директория можете да изпълните следната команда:

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

Което ще създаде нов файл на Java KeyStore, наречен truststore.jks след като ви подкани да въведете парола за KeyStore и попитате дали искате да се доверите на сертификата (да, имате). Ако вече имате файл truststore, можете да изпълните същата команда, като замените truststore.jks с пътя до съществуващия ви KeyStore (вместо това ще бъдете подканени за паролата на съществуващия KeyStore). Обикновено поставям truststore.jks в моя conf директория.

Второ, в application.conf трябва да добавите няколко параметра на JDBC URL към URL адреса на базата данни:

verifyServerCertificate=true - Откажете да се свържете, ако сертификатът за хост не може да бъде проверен.

useSSL=true - Свързване чрез SSL.

requireSSL=true - Откажете да се свържете, ако MySQL сървърът не поддържа SSL.

Например, ако текущата ви база данни URL е:

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

Тогава трябва да бъде:

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

И накрая, има няколко опции от командния ред, които трябва да се предадат при стартиране на сървъра на Play, за да се конфигурира хранилището за доверие, което MySQL-Connector/J ще използва. Ако приемем моя truststore.jks файлът се намира в conf директория, а паролата е password , бих стартирал моя сървър (в режим на разработка) по следния начин:

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

В допълнение към това, аз също обичам да се уверя, че е невъзможно да се свържете с базата данни без използване на SSL, само в случай, че опциите по някакъв начин се объркат на ниво приложение. Например, ако db.default.user=root , след това когато сте влезли като root в MySQL сървъра, изпълнете следните заявки:

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. MySQL - броене по месеци (включително липсващи записи)

  2. Архивирайте потребителите на MySQL

  3. Как да добавя mode=mysql към вградената H2 DB в Spring Boot 1.4.1 за @DataJpaTest?

  4. ГРЕШКА:Връзката е в режим на автоматично записване

  5. Дизайн на база данни за съхранение на чат съобщения между хора