Untuk mengatasi risiko ini, MySQL mendukung enkripsi transit antara klien dan server melalui protokol TLS/SSL. Artikel ini berfokus pada pembuatan sertifikat SSL dan file kunci secara manual di MySQL untuk mengonfigurasi SSL. Belakangan, artikel tersebut juga berfokus pada pengaktifan persyaratan enkripsi wajib dari klien Show
MulaiMySQL versi 5. 7. 28+ menyediakan alat praktis yang dikenal sebagai mysql_ssl_rsa_setup, yang bergantung pada binari OpenSSL untuk secara otomatis menghasilkan sertifikat dan kunci SSL yang diperlukan untuk mendukung koneksi yang aman Oleh karena itu, sebelum memulai, periksa status koneksi SSL default dari server MySQL. Ketik perintah berikut untuk memverifikasi nilai sesi SSL mysql> tampilkan variabel global seperti '%ssl%'; Output di atas menunjukkan MySQL tidak mendukung enkripsi saat transit untuk sesi saat ini Gunakan OpenSSL untuk Membuat Sertifikat dan Kunci SSLUntuk menyediakan enkripsi saat transit, MySQL memerlukan sertifikat X509 sisi klien dan sisi server yang ditandatangani oleh otoritas Sertifikat untuk memvalidasi kepemilikan domain. Kami akan membuat sertifikat yang ditandatangani sendiri, serta sertifikat sisi server dan klien melalui utilitas baris perintah OpenSSL. Ini adalah alat pustaka OpenSSL yang menghasilkan kunci pribadi, membuat permintaan sertifikat X509, menandatanganinya sebagai CA, dan memverifikasinya Sebelum memulai, buat direktori untuk menyimpan semua file ubuntu@ubuntu. ~$ mkdir / var /lib/mysql/transit Serangkaian perintah berikut akan menghasilkan beberapa prompt yang harus memiliki respons yang tidak kosong Kunci Otoritas Sertifikat dan Pembuatan SertifikatMembuat sertifikat yang ditandatangani sendiri memerlukan sertifikat Otoritas Sertifikat (CA) melalui file kunci pribadi. Gunakan perintah OpenSSL untuk membuat kunci privat RSA 2048 bit untuk CA ubuntu@ubuntu. ~$ openssl genrsa 2048 > kunci-ca. pem Gunakan kunci di atas dengan perintah req OpenSSL untuk menghasilkan sertifikat untuk CA Anda sendiri dengan kedaluwarsa 3000 hari ubuntu@ubuntu. ~$ openssl req -new -x509 -nodes -days 3000 -key ca-key.pem -out ca. pem Perintah di atas membuat file baru ca-key. pem dan ca. pem untuk menandatangani sendiri sertifikat X509 server dan klien MySQL Hasilkan Kunci Pribadi dan Sertifikat yang Ditandatangani Sendiri untuk Server MySQLGunakan OpenSSL untuk menghasilkan kunci RSA server MySQL dan Permintaan Penandatanganan Sertifikat (CSR) ubuntu@ubuntu. ~$ openssl genrsa 2048 > server-key. pem Sekarang, hapus frasa sandi dari kunci server ubuntu@ubuntu. ~$ openssl rsa -in server-key. pem -out server-key. pem Hasilkan sertifikat yang ditandatangani sendiri server MySQL dari permintaan sertifikat dengan menggunakan kunci privat CA dan sertifikat ubuntu@ubuntu. ~$ openssl x509 -req -in server-req. pem -hari 3600 -CA ca. pem -CAkey ca-key. pem -set_serial 01 -out sertifikat server. pem Sekarang, konfigurasi SSL untuk MySQL tidak memerlukan CSR Hasilkan Kunci Klien dan Sertifikat yang Ditandatangani SendiriDemikian pula, buat permintaan kunci dan sertifikat untuk klien ubuntu@ubuntu. ~$ openssl req -newkey rsa. 2048 -hari 3600 -node -keyout client-key.pem -out permintaan-klien. pem Hapus frasa sandi dari kunci dan hasilkan sertifikat klien dari permintaan sertifikat menggunakan file CA ubuntu@ubuntu. ~$ openssl rsa -in kunci-klien. pem -out kunci klien. pem Server hanya akan menerima koneksi jarak jauh dari klien dengan file-file ini Terakhir, verifikasi sertifikat klien dan sisi server terhadap sertifikat CA ubuntu@ubuntu. ~$ openssl verifikasi -CAfile ca. pem server-cert. pem klien-sertifikat. pem Nilai OK menunjukkan bahwa sertifikat dibuat dengan benar dan siap digunakan Konfigurasi Server MySQLUntuk mengaktifkan layanan TLS/SSL untuk server MySQL memerlukan pengaturan sejumlah variabel sistem di dalam file konfigurasi utama MySQL mysqld. conf, seperti
Gunakan editor favorit Anda untuk mengedit file konfigurasi yang terletak di dalam /etc/mysql/mysql. conf. d direktori ubuntu@ubuntu. ~$ vim / dll /mysql/mysql.conf.d/ mysqld. cnf Terakhir, ubah kunci SSL dan kepemilikan sertifikat, serta izin ubuntu@ubuntu. ~$ chown -R mysql. mysql / var / lib /mysql/new_certs/ Mulai ulang database untuk memuat perubahan terbaru ubuntu@ubuntu. ~$ sudo layanan restart mysql Login ke server setelah restart dan periksa status sesi MySQL SSL saat ini Konfigurasi sisi klienMembuat koneksi jarak jauh yang aman dari klien memerlukan transfer file sertifikat OpenSSL sisi klien yang dihasilkan di atas. Buat direktori baru dan gunakan utilitas SCP untuk transfer file yang aman ubuntu@ubuntu. ~$ mkdir ~ / sertifikat-klien Saat membuat koneksi jarak jauh terenkripsi, klien sekarang memerlukan penambahan opsi sisi klien yang memverifikasi kunci dan sertifikat sisi klien. Opsi yang disertakan mirip dengan variabel sistem sisi server tetapi, opsi –ssl-key dan –ssl-cert mengidentifikasi jalur ke kunci pribadi dan sertifikat klien. Gunakan opsi –ssl-ca untuk menambahkan jalur ke sertifikat CA. File ini harus sama dengan sertifikat CA sisi server Gunakan perintah di bawah ini dengan semua opsi yang diperlukan untuk membuat koneksi jarak jauh yang aman dengan server database MySQL ubuntu@ubuntu. ~$ mysql -u pengguna -p -h <SSLServer_IPAddress> --ssl-ca= ~/client-cert/ca.pem --ssl-cert =~ / client-cert /client-cert.pem --ssl-key =under ~ / client-cert< . pem /client-key.pem Konfigurasikan Koneksi Terenkripsi WajibUntuk beberapa server MySQL, klien tidak hanya diharuskan untuk terhubung dengan server melalui koneksi terenkripsi, tetapi juga wajib. MySQL memungkinkan administrator server untuk mengonfigurasi koneksi terenkripsi wajib. Itu dimungkinkan dengan menempatkan tiga tingkat kontrol yang berbeda
Mari kita perinci masing-masing membutuhkan_mengamankan_transportasiUntuk memastikan klien menggunakan koneksi terenkripsi, aktifkan variabel require_secure_transport di file konfigurasi MySQL yang terletak di /etc/mysql/mysql. cnf. d direktori ubuntu@ubuntu. ~$ sudo vim / dll /mysql/mysql.conf.d/ mysqld. cnf Variabel sistem di atas memastikan klien menggunakan transportasi aman untuk terhubung dengan server, dan server hanya mengizinkan koneksi TCP melalui SSL. Oleh karena itu, server menolak permintaan koneksi klien apa pun tanpa transportasi yang aman dan mengembalikan keluaran kesalahan ke program klien Selain itu, konfigurasi server di atas juga menonaktifkan koneksi klien jarak jauh ke server dengan string –ssl-mode=DISABLED Memanggil Program KlienTingkat kontrol ini memungkinkan pemanggilan program klien untuk mengatur komunikasi terenkripsi yang aman, terlepas dari pengaturan server. Artinya, bahkan jika server tidak dikonfigurasi untuk wajib membangun transportasi SSL/TLS, itu dapat mempertahankan koneksi aman sesuai keinginan klien. Ini dimungkinkan dengan menggunakan opsi –ssl-mode yang tersedia di MySQL 5. 7. 11 beserta berbagai nilainya. Sangat membantu untuk menentukan status keamanan yang diinginkan dari koneksi klien ke server. Nilai opsi diterapkan berdasarkan tingkat keketatan yang semakin meningkat
Namun, perlu diperhatikan bahwa verifikasi nama host tidak berfungsi untuk sertifikat yang ditandatangani sendiri. Ini termasuk sertifikat yang dibuat secara otomatis oleh server atau dibuat secara manual melalui alat mysql_ssl_rsa_setup Terlepas dari enkripsi default, MySQL memungkinkan klien untuk menyertakan pengaturan keamanan tambahan dengan memberikan sertifikat CA, sama seperti server, dan mengaktifkan verifikasi identitas nama host. Pengaturan ini memungkinkan kedua belah pihak untuk mempercayai entitas yang sama, dan klien dapat memverifikasi bahwa itu terhubung ke host yang tepat Kami sekarang memahami bagaimana mode di atas berinteraksi dengan opsi sertifikat CA
Konfigurasikan Akun PenggunaUntuk mengaktifkan komunikasi terenkripsi oleh klien, konfigurasikan akun pengguna tertentu untuk mengakses server MySQL melalui SSL. Buat akun pengguna CREATE USER dengan pernyataan klausa REQUIRE. Atau, gunakan pernyataan ALTER USER untuk menambahkan klausa REQUIRE. Kontrol ini menghentikan upaya koneksi klien ke server jika tidak mendukung koneksi terenkripsi Klausul REQUIRE berguna untuk menjalankan konfigurasi terkait enkripsi yang menerapkan persyaratan keamanan yang ketat. Ini memungkinkan menentukan satu atau lebih dari satu nilai tls_option Mari masuk ke detail opsi perintah yang diperlukan dari klien yang dikonfigurasi dengan berbagai nilai REQUIRE TIDAK ADA. tidak memerlukan koneksi SSL Klausa menentukan karakteristik enkripsi yang diperlukan sehingga tidak perlu menyertakan opsi SSL mysql> BUAT PENGGUNA 'pengguna'@'localhost' MEMBUTUHKAN X509; Sekarang, klien perlu menentukan opsi –ssl-key dan –ssl-cert untuk terhubung, sementara -ssl-ca tidak diperlukan (ini juga berlaku untuk nilai penerbit dan subjek) ubuntu@ubuntu. ~$ mysql -u pengguna -p -h <SSLServer_IPAddress> --ssl-cert=client-cert.pem --ssl-key =client-key. pem PENERBIT. akun yang dibuat dengan pernyataan REQUIRE ISSUER, mengharuskan klien untuk menentukan opsi –ssl-key dan –ssl-cert dengan sertifikat valid yang dikeluarkan oleh 'penerbit' CA. Buat akun pengguna sebagai berikut mysql> CREATE USER 'user'@'localhost' REQUIRE ISSUER '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL/CN=CA/emailAddress=ca@example. com'; Jika sertifikat valid dengan penerbit yang berbeda, upaya sambungan gagal SUBJEK. mewajibkan klien untuk menunjukkan sertifikat dengan nilai subjek yang diberikan saat membuat akunnya. Sambungan dengan sertifikat yang valid tetapi subjek yang berbeda mengakibatkan pemutusan sambungan mysql> CREATE USER 'user'@'localhost' REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL demo client certificate/ CN=client/emailAddress=client@example. com'; SANDI. akun yang dibuat dengan pernyataan tersebut mengharuskan klien untuk menyertakan metode penyandian yang digunakan untuk mengenkripsi komunikasi. Penting untuk memastikan apakah sandi dan panjang kunci cukup kuat mysql> BUAT USER 'user'@'localhost' MEMERLUKAN CIPHER 'EDH-RSA-DES-CBC3-SHA'; KesimpulanArtikel ini mengilustrasikan cara mengamankan komunikasi antara server MySQL dan klien dengan mengaktifkan protokol SSL. Kami belajar membuat sertifikat yang ditandatangani sendiri secara manual karena kami mempercayai host di jaringan. Kami juga menerapkan enkripsi transit untuk komunikasi server MYSQL di luar jaringan dan mempelajari cara mengonfigurasi server untuk persyaratan enkripsi wajib Bagaimana cara mengenkripsi data di tabel MySQL?Untuk mengenkripsi data dalam tablespace file-per-tabel InnoDB, jalankan ALTER TABLE tbl_name ENCRYPTION = 'Y' . Untuk mengenkripsi tablespace umum atau tablespace mysql, jalankan ALTER TABLESPACE tablespace_name ENCRYPTION = 'Y'. Dukungan enkripsi untuk tablespace umum diperkenalkan di MySQL 8. 0.
Bagaimana saya tahu jika database MySQL saya dienkripsi?Jika tablespace umum berisi tabel, periksa informasi tabel untuk melihat apakah tabel dienkripsi . Ketika tablespace umum tidak berisi tabel, Anda dapat memverifikasi apakah tablespace dienkripsi atau tidak. Untuk tablespace tunggal, verifikasi opsi ENCRYPTION menggunakan INFORMATION_SCHEMA.
Apakah MySQL memiliki enkripsi?MySQL mendukung koneksi terenkripsi antara klien dan server menggunakan protokol TLS (Transport Layer Security) . TLS terkadang disebut sebagai SSL (Secure Sockets Layer) tetapi MySQL sebenarnya tidak menggunakan protokol SSL untuk koneksi terenkripsi karena enkripsinya lemah (lihat Bagian 6. 3.
Bagaimana cara mengenkripsi kata sandi di database MySQL?Server MySQL menggunakan fungsi PASSWORD untuk mengenkripsi kata sandi MySQL untuk penyimpanan di kolom Kata Sandi pada tabel hibah pengguna. Nilai yang dikembalikan oleh fungsi PASSWORD adalah string hash, atau NULL jika argumennya adalah NULL. Fungsi PASSWORD menerima satu parameter yaitu string yang akan dienkripsi. |