Bagaimana cara mengaktifkan enkripsi di mysql?

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

Mulai

MySQL 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%';

+----+----+

Nama_variabel. Nilai

+----+----+

have_openssl. DENGAN DISABILITAS

have_ssl. DENGAN DISABILITAS

ssl_ca.

ssl_capath.

ssl_cert.

ssl_cipher.

ssl_crl.

ssl_crlpath.

ssl_key.

+----+----+

9 baris dalam set (0. 53 detik)

Output di atas menunjukkan MySQL tidak mendukung enkripsi saat transit untuk sesi saat ini

Gunakan OpenSSL untuk Membuat Sertifikat dan Kunci SSL

Untuk 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

ubuntu@ubuntu. ~$ cd / var /lib/mysql/transit

Serangkaian perintah berikut akan menghasilkan beberapa prompt yang harus memiliki respons yang tidak kosong

Kunci Otoritas Sertifikat dan Pembuatan Sertifikat

Membuat 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 MySQL

Gunakan OpenSSL untuk menghasilkan kunci RSA server MySQL dan Permintaan Penandatanganan Sertifikat (CSR)

ubuntu@ubuntu. ~$ openssl genrsa 2048 > server-key. pem

ubuntu@ubuntu. ~$ openssl req -new -key server-key. pem -out server-req. 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 Sendiri

Demikian 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

ubuntu@ubuntu. ~$ openssl x509 -req -in client-req. pem -hari 365000 -CA ca. pem -CAkey ca-key. pem -set_serial 01 -keluar sertifikat 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

server-cert. pem. OKE

sertifikat klien. pem. OKE

Nilai OK menunjukkan bahwa sertifikat dibuat dengan benar dan siap digunakan

Konfigurasi Server MySQL

Untuk mengaktifkan layanan TLS/SSL untuk server MySQL memerlukan pengaturan sejumlah variabel sistem di dalam file konfigurasi utama MySQL mysqld. conf, seperti

  • Gunakan ssl_cert dan ssl_key untuk menyetel jalur ke sertifikat server dan kunci pribadi
  • Gunakan variabel ssl_ca untuk menyetel jalur ke sertifikat CA di sisi server

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

[ mysqld ]

ssl_ca = / var /lib/mysql/new_certs/ca.pem

ssl_cert = / var /lib/mysql/new_certs/ server-cert.pem

ssl_key = / var /lib/mysql/new_certs/server-key.pem

Terakhir, ubah kunci SSL dan kepemilikan sertifikat, serta izin

ubuntu@ubuntu. ~$ chown -R mysql. mysql / var / lib /mysql/new_certs/

ubuntu@ubuntu. ~$ chmod 600 kunci klien. kunci server pem. pem ca-key. pem

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 klien

Membuat 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

ubuntu@ubuntu. ~$ scp pengguna @[IP_Address]:/ var / lib / . pem ~mysql/transit/ca-cert.pem ~/ sertifikat-klien /

ubuntu@ubuntu. ~$ scp pengguna @[IP_Address]:/ var / lib / . pem ~mysql/transit/client-cert.pem ~/ sertifikat-klien /

ubuntu@ubuntu. ~$ scp pengguna @[IP_Address]:/ var / lib / . pem ~mysql/transit/client-key.pem ~/ 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 Wajib

Untuk 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

  • Konfigurasi MySQL yang mengharuskan klien untuk mengakses database hanya melalui koneksi terenkripsi
  • Aktifkan program klien untuk memerlukan koneksi terenkripsi, meskipun MySQL mengizinkan tetapi tidak selalu memerlukannya
  • Konfigurasikan akun pengguna tertentu untuk mengakses database hanya melalui saluran terenkripsi

Mari kita perinci masing-masing

membutuhkan_mengamankan_transportasi

Untuk 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

[ mysqld ]

require_secure_transport =AKTIF

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 Klien

Tingkat 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

  • DENGAN DISABILITAS. nilai membuat koneksi tidak aman
  • DIUTAMAKAN. modenya mirip dengan ketika tidak ada opsi –ssl-mode yang ditentukan. Itu membuat enkripsi hanya jika server mendukungnya sebaliknya, itu kembali ke koneksi default yang tidak terenkripsi
  • YG DIBUTUHKAN. nilainya memastikan komunikasi terenkripsi jika server diaktifkan untuk mendukungnya. Klien gagal dalam upaya koneksi jika MySQL tidak mendukung TLS/SSL
  • VERIFIKASI_CA. nilainya berfungsi mirip dengan REQUIRED, tetapi selain itu, juga memverifikasi sertifikat CA server. Klien gagal terhubung jika tidak ada sertifikat pencocokan yang valid
  • VERIFIKASI_IDENTITAS. mirip dengan VERIFY_CA, tetapi untuk OpenSSL versi 1. 0. 2+, klien juga dapat memverifikasi nama host yang mereka gunakan untuk terhubung dengan identitas di sertifikat server. Koneksi terputus jika terjadi ketidakcocokan

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

  • tentukan sertifikat CA dengan opsi -ssl-ca dengan –ssl-mode=VERIFY_CA
  • aktifkan verifikasi identitas hostname dengan menggunakan –ssl-mode=VERIFY_IDENTITY
  • nilai –ssl-mode selain VERIFY_IDENTITY atau VERIFY_CA dengan -ssl-ca akan menghasilkan peringatan yang menyatakan non-verifikasi sertifikat server

Konfigurasikan Akun Pengguna

Untuk 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
SSL. server hanya mengizinkan koneksi terenkripsi dari akun yang mendukung SSL
X509. mengharuskan klien untuk menunjukkan kunci pribadi dan sertifikat. Nilai ini tidak mengharuskan untuk menunjukkan sertifikat CA, subjek, dan penerbit

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';

Kesimpulan

Artikel 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.