SSL/TLS Encryption in Transit for MySQL/MariaDB/Percona
Solusi database MySQL/MariaDB/Percona dilengkapi dengan add-on bawaan yang menerapkan “encryption in transit ”. Fungsionalitas ini memastikan perlindungan data dengan koneksi terenkripsi SSL/TLS saat data berpindah antar server. Setelah pemasangan add-on, semua operasi terkait ditangani secara otomatis - enkripsi data sebelum transmisi, otentikasi titik akhir, dekripsi konten, dan verifikasi saat tiba.
Add-On Installation
Add-on dapat dipasang di atas node MySQL/MariaDB/Percona dan ProxySQL (untuk cluster database) saja.
1. Dalam dashboard platform, pergi ke bagian Add-Ons dari lapisan database yang sesuai, dan klik Install untuk solusi SSL/TLS Encrypted Connection.
Add-on ini juga tersedia dari Marketplace dan dapat diimpor dari repositori GitHub yang sesuai.
2. Dalam jendela instalasi yang terbuka, pilih Environment dan Node Group(s) target di mana add-on akan dipasang.
Baik lapisan MySQL/MariaDB/Percona dan ProxySQL (jika ditambahkan) harus dipilih untuk solusi clustered.
Klik Install untuk melanjutkan.
3. Dalam satu menit, database Anda akan dikonfigurasi ulang untuk bekerja melalui koneksi terenkripsi.
Add-On Specifics
Di bawah ini Anda dapat mempelajari tentang proses dan spesifikasi pembuatan sertifikat:
- Sertifikat dibuat dengan utilitas /usr/local/sbin/selfcertgen.
- Sertifikat bersifat self-signed dan diterbitkan untuk hostname node tertentu. Artinya setiap node memiliki satu set sertifikat sendiri, dan Anda harus menggunakan yang sesuai dengan node yang diakses untuk otentikasi.
- Sertifikat disimpan dalam folder /var/lib/jelastic/keys/SSL-TLS (dapat diakses melalui pintasan keys di file manager). Terdapat dua subfolder:
- server – sertifikat server digunakan untuk memberikan enkripsi TLS dari koneksi ke database
- client – sertifikat client yang dapat diunduh dapat digunakan untuk mengotentikasi koneksi klien ke server database
Konfigurasi MySQL/MariaDB/Percona:
-
Semua konfigurasi add-on disediakan melalui file konfigurasi terpisah /etc/mysql/conf.d/ssl-config.cnf:
[mysqld]
ssl_cert=/var/lib/jelastic/keys/SSL-TLS/server/server.crt
ssl_key=/var/lib/jelastic/keys/SSL-TLS/server/server.key
ssl-cipher=ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA
#require_secure_transport=ON
- Konfigurasinya menyediakan jalur ke file SSL server dan daftar cipher yang didukung. Juga, termasuk opsi (dikomentari secara default) untuk membuat server meminta penggunaan koneksi aman. Jika diubah, klien tidak akan dapat terhubung ke server ini menggunakan koneksi biasa yang tidak terenkripsi.
Konfigurasi ProxySQL:
-
SSL pada node ProxySQL diaktifkan dengan menetapkan variabel berikut pada semua server:
- mysql-have_ssl (true) - mengaktifkan SSL untuk koneksi frontend
- use_ssl (1) - menetapkan kolom yang sesuai di mysql_servers, yang akan memberi tahu ProxySQL bahwa node backend kita menggunakan SSL
-
Perubahan dilakukan dengan kueri SQL berikut:
UPDATE global_variables SET variable_value='true' WHERE variable_name='mysql-have_ssl';
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
UPDATE mysql_servers SET use_ssl=1 WHERE port=3306;
LOAD MYSQL VARIABLES TO RUNTIME;
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
Add-On Configuration
Setelah pemasangan, add-on dapat ditemukan di bawah tab Add-Ons untuk layer yang sesuai. Di sini, Anda dapat menghasilkan ulang sertifikat SSL dengan mengklik tombol Re-issue certificates (misalnya jika Anda berpikir mereka dikompromikan atau terhapus secara tidak sengaja).
Untuk menghapus add-on dari layer (termasuk konfigurasi khusus dan sertifikat SSL yang dihasilkan), perluas menu di pojok kanan atas panel dan klik Uninstall.
Secure Connection to MySQL/MariaDB/Percona
1. Fungsionalitas “encryption in transit ” (server-side encryption) berfungsi segera setelah pemasangan add-on. Anda dapat memeriksanya dengan menghubungkan ke database menggunakan kredensial dari email. Untuk koneksi jarak jauh, Anda bisa menambahkan endpoint atau public IP:
Gunakan perintah berikut untuk menghubungkan ke database:
mysql --ssl-mode=required -h {host} -P {port} -u {user} -p
Jika Anda bekerja dengan klien MariaDB, ganti opsi “--ssl-mode=required” dengan “--ssl”.
Di sini:
{user}
- nama pengguna database untuk koneksi{host}
- titik masuk database (endpoint, dalam kasus kita){port}
- port untuk koneksi (dari endpoint, dalam kasus kita)
Setelah terhubung, jalankan perintah status dan periksa lini SSL di output.
2. Ketika terhubung ke server, Anda dapat mengonfigurasi penggunaan sertifikat klien untuk otentikasi untuk mendapatkan server- dan client-side encryption. Jalankan perintah di bawah ini untuk membuat otentikasi SSL wajib untuk pengguna yang ditentukan. Misalnya, kita akan memberikan “user-2700607 ” (gantilah placeholder {user}
) dari email yang diterima setelah pembuatan environment:
FLUSH PRIVILEGES;
ALTER USER '{user}'@'%' REQUIRE X509;
ALTER USER '{user}'@'localhost' REQUIRE X509;
FLUSH PRIVILEGES;
Common name (CN) tidak diperiksa, setiap sertifikat yang ditandatangani dengan certificate authority (CA) ini akan dianggap sesuai. Jika Anda ingin memeriksa CN dari sertifikat klien (yaitu apakah sertifikat diterbitkan untuk pengguna tertentu), jalankan perintah berikut: FLUSH PRIVILEGES; ALTER USER '{user}'@'%' REQUIRE SUBJECT 'CN={user}'; ALTER USER '{user}'@'localhost' REQUIRE SUBJECT 'CN={user}'; FLUSH PRIVILEGES;
, Juga, jika Anda ingin menggunakan sertifikat saja untuk login, Anda bisa menghapus persyaratan password dengan perintah ALTER USER juga.
Sekarang, berikan server klien (komputer/container/VM) dengan file sertifikat SSL yang sesuai, yang dapat diunduh dari direktori /var/lib/jelastic/keys/SSL-TLS/client dari node target yang dibutuhkan. Setelah selesai, Anda bisa terhubung dengan perintah berikut:
mysql –h {host} -P {port} -u {user} -p --ssl-mode=required --ssl-ca={path/to/root.crt} --ssl-cert={path/to/client.crt} --ssl-key={path/to/client.key}
Untuk menghindari menentukan sertifikat sebagai argumen, Anda dapat menambahkan opsi semacam itu ke file my.cnf di server klien:
[client]
ssl-ca = {path/to/root.crt}
ssl-cert = {path/to/client.crt}
ssl-key = {path/to/client.key}