Dengan asumsi Anda sudah memiliki penyiapan sertifikat CA untuk server MySQL (yang terjadi saat menggunakan Amazon RDS), ada beberapa langkah untuk membuatnya berfungsi.
Pertama, sertifikat CA harus diimpor ke file Java KeyStore menggunakan alat kunci
, yang datang dengan JDK. KeyStore dalam hal ini akan berisi semua sertifikat CA yang ingin kita percayai. Untuk Amazon RDS, sertifikat CA dapat ditemukan di sini
. Dengan mysql-ssl-ca-cert.pem
di direktori kerja Anda, Anda dapat menjalankan perintah berikut:
keytool -import -alias mysqlServerCACert -file mysql-ssl-ca-cert.pem -keystore truststore.jks
Yang akan membuat file Java KeyStore baru bernama truststore.jks
setelah meminta Anda memasukkan kata sandi KeyStore dan menanyakan apakah Anda ingin memercayai sertifikat tersebut (ya, Anda percaya). Jika Anda sudah memiliki file truststore, Anda dapat menjalankan perintah yang sama, menggantikan truststore.jks
dengan jalur ke KeyStore yang ada (Anda kemudian akan dimintai kata sandi dari KeyStore yang ada). Saya biasanya menempatkan truststore.jks
di conf
my saya direktori.
Kedua, di application.conf
Anda perlu menambahkan beberapa parameter URL JDBC ke URL database:
verifyServerCertificate=true
- Menolak untuk terhubung jika sertifikat host tidak dapat diverifikasi.
useSSL=true
- Terhubung menggunakan SSL.
requireSSL=true
- Menolak untuk terhubung jika server MySQL tidak mendukung SSL.
Misalnya, jika URL basis data Anda saat ini adalah:
db.default.url="jdbc:mysql://url.to.database/test_db"
Maka sekarang seharusnya:
db.default.url="jdbc:mysql://url.to.database/test_db?verifyServerCertificate=true&useSSL=true&requireSSL=true"
Terakhir, ada beberapa opsi baris perintah yang perlu dilewati saat memulai server Play untuk mengonfigurasi truststore yang akan digunakan MySQL-Connector/J. Dengan asumsi truststore.jks
saya file terletak di conf
direktori, dan kata sandinya adalah password
, saya akan memulai server saya (dalam mode dev) seperti ini:
activator run -Djavax.net.ssl.trustStore="conf/truststore.jks" -Djavax.net.ssl.trustStorePassword="password"
Selain itu, saya juga ingin memastikan bahwa tidak mungkin untuk terhubung ke database tanpa menggunakan SSL, untuk berjaga-jaga jika opsinya entah bagaimana kacau di tingkat aplikasi. Misalnya jika db.default.user=root
, lalu saat login sebagai root
di server MySQL, jalankan kueri berikut:
GRANT USAGE ON *.* TO 'root'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;