GNU/Linux >> Belajar Linux >  >> Cent OS

Cara Mengaktifkan SSL dan Koneksi Jarak Jauh untuk MySQL di CentOS 7

MySQL adalah sistem database relasional open source yang bekerja pada banyak Sistem Operasi termasuk Windows, Linux, MacOS dan FreeBSD. Ini mungkin RDBMS OpenSource paling populer dan komponen utama dari LAMP dan LEMP Stacks. Ada banyak aplikasi yang bergantung pada MySQL seperti Wordpress, Joomla, TYPO3, phpBB dan banyak lagi.

Dalam tutorial ini, saya akan menunjukkan langkah demi langkah untuk mengkonfigurasi MySQL dengan aman untuk koneksi jarak jauh. Saat Anda perlu mengakses MySQL dari jarak jauh, Anda harus menggunakan VPN karena MySQL tidak mengenkripsi data yang ditransfer atau Anda dapat mengonfigurasi MySQL untuk menggunakan SSL, seperti yang akan saya tunjukkan dalam tutorial ini. Dalam konfigurasi ini, hanya pengguna dengan file sertifikat SSL yang benar yang diizinkan untuk terhubung ke server MySQL, dan lalu lintas dienkripsi. Kami akan menginstal versi terbaru MySQL, dan kemudian mengkonfigurasi SSL untuk koneksi jarak jauh. Untuk sistem dasar, saya akan menggunakan server CentOS 7.

Apa yang akan kami lakukan:

  1. Instal MySQL.
  2. Konfigurasikan Kata Sandi Root MySQL.
  3. Buat File Sertifikat SSL Baru yang ditandatangani sendiri.
  4. Aktifkan SSL untuk MySQL.
  5. Aktifkan Koneksi Jarak Jauh.
  6. Pengujian.

Prasyarat

  • Server CentOS 7
  • Hak istimewa root

Langkah 1 - Instal MySQL

Dalam tutorial ini, kita akan menggunakan MySQL 5.7, versi terbaru saat ini. Ini diinstal dari repositori MySQL, jadi kita harus menambahkan repositori CentOS baru ke sistem terlebih dahulu.

Tambahkan repositori baru untuk MySQL dengan perintah yum di bawah ini.

yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

Anda akan diminta untuk menginstal paket baru, ketik 'y ' dan tekan 'Enter ' untuk mengonfirmasi.

Sekarang Anda dapat menginstal MySQL versi terbaru 5.7 ke server seperti ini:

yum -y install mysql-community-server

Ketika instalasi telah selesai, jalankan layanan MySQL dan aktifkan untuk berjalan secara otomatis pada saat boot dengan perintah systemctl.

systemctl start mysqld
systemctl aktifkan mysqld

Pastikan MySQL berjalan dengan memeriksa port yang digunakan MySQL (3306). Periksa dengan perintah netstat di bawah.

netstat -plntu

MySQL telah diinstal pada CentOS 7 dari repositori MySQL.

Langkah 2 - Konfigurasikan Kata Sandi Root MySQL

Secara default, MySQL 5.7 menghasilkan kata sandi root default untuk Anda saat memulai layanan pertama kali. Kata sandi disimpan dalam file log MySQL '/var/log/mysqld.log'.

Untuk melihat password root MySQL default, Anda dapat menggunakan perintah grep di bawah ini.

grep 'sementara' /var/log/mysqld.log

Anda akan melihat hasil mirip dengan yang di bawah ini, sandi default saya adalah 'wxtX8Te&Uh1K '.

Sandi sementara dibuat untuk [dilindungi email]:wxtX8Te&Uh1K

Hubungkan ke shell MySQL dengan kata sandi default dan ganti kata sandi dengan kata sandi Anda sendiri.

mysql -u root -p
KETIKA SANDI DEFAULT

Sekarang ganti kata sandi default dengan kata sandi Anda sendiri. Dalam tutorial ini, saya akan menggunakan '[email protected] ' sebagai kata sandi root MySQL baru. Jalankan kueri MySQL di bawah ini.

ALTER USER 'root'@'localhost' DIIDENTIFIKASI DENGAN '[email protected]';
hak flush;
exit;

Sekarang Anda dapat terhubung lagi dengan sandi baru '[email protected]'.

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'

Langkah 3 - Buat File Sertifikat yang Ditandatangani Sendiri Baru

Secara default, MySQL 5.7 memiliki file sertifikat SSL sendiri di direktori '/var/lib/mysql'. Namun dalam tutorial ini, saya akan menunjukkan cara membuat file Sertifikat SSL Anda sendiri dengan OpenSSL, dan kemudian mengonfigurasinya dengan MySQL.

Pada langkah ini, kami akan membuat file sertifikat yang ditandatangani sendiri. Kami membutuhkan 3 sertifikat, Sertifikat CA, Sertifikat dan Kunci Server, Sertifikat dan Kunci Klien . Kami akan membuatnya dengan OpenSSL.

Buat direktori baru untuk file sertifikat SSL '/etc/certs/' dan buka direktori tersebut.

mkdir -p /etc/certs
cd /etc/certs

Buat file ca.pem sertifikat CA baru.

openssl genrsa 2048> ca-key.pem
openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem

Selanjutnya, kita harus membuat sertifikat sisi server. Buat file server-cert.pem dan server-key.pem sertifikat server baru. Buat file sertifikat baru, hapus frasa sandi, dan tanda tangani dengan sertifikat CA.

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

Sekarang buat file sertifikat untuk klien. Server MySQL hanya akan menerima koneksi jarak jauh dari klien yang memiliki file sertifikat ini. Buat file sertifikat klien baru, hapus frasa sandi, dan tanda tangani menggunakan sertifikat CA.

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

Catatan:

Info sertifikat CA harus berbeda dari info klien dan server.

Semua sertifikat yang kami perlukan untuk penyiapan ini telah dibuat. Sekarang kita dapat memverifikasi file sertifikat dengan perintah di bawah ini.

openssl verifikasi -CAfile ca.pem server-cert.pem client-cert.pem

Pastikan tidak ada error, hasilnya seperti di bawah ini.

Semua file Sertifikat telah diverifikasi. Ubah pemilik direktori certs menjadi pengguna 'mysql' dan ubah izin semua file kunci.

chown -R mysql:mysql /etc/certs/
chmod 600 client-key.pem server-key.pem ca-key.pem

Langkah 4 - Aktifkan SSL untuk MySQL

Pada langkah ini, kita akan mengaktifkan SSL untuk MySQL. Sebelum kita mulai mengkonfigurasi dan mengaktifkan SSL di MySQL, kita perlu membuat cadangan file sertifikat default ke direktori cadangan baru.

Buat direktori cadangan baru 'mysql-certs ' untuk semua sertifikat.

mkdir -p ~/mysql-certs/

Buka direktori '/var/lib/mysql' dan pindahkan semua sertifikat default ke direktori cadangan.

cd /var/lib/mysql/
mv ca.pem ca-key.pem ~/mysql-certs/
mv server-key.pem server-cert.pem ~/mysql-certs /
mv client-key.pem client-cert.pem ~/mysql-certs/
mv private_key.pem public_key.pem ~/mysql-certs/

Sekarang restart layanan MySQL.

systemctl restart mysqld

Selanjutnya, periksa SSL dari shell MySQL. Masuk ke mysql dengan kata sandi baru:

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'

Jalankan kueri di bawah ini agar kita dapat melihat status SSL untuk MySQL.

TAMPILKAN VARIABEL GLOBAL SEPERTI '%ssl%';
STATUS;

Anda akan melihat status SSL 'DINONAKTIFKAN ', dan pengguna root telah terhubung tanpa SSL .

Selanjutnya, kita akan mengaktifkan koneksi SSL untuk MySQL. Kita harus mengedit file konfigurasi MySQL 'my.cnf ' file dengan vim.

vim /etc/my.cnf

Di '[mysqld] ', rekatkan konfigurasi di bawah ini.

# Ketik direktori sertifikat Anda sendiri
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/server-cert.pem
ssl-key =/etc/certs/server-key.pem

Simpan file dan keluar dari vim, restart layanan MySQL.

systemctl restart mysqld

Sekarang login ke MySQL lagi dan periksa SSL.

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'

Jalankan kueri di bawah untuk memastikan nilai bagian SSL adalah 'YA '.

TAMPILKAN VARIABEL SEPERTI '%ssl%';
STATUS;

Anda akan melihat bahwa SSL untuk MySQL diaktifkan, tetapi pengguna root masih belum terhubung menggunakan koneksi SSL.

Untuk memaksa semua koneksi pengguna lokal dengan SSL, edit file konfigurasi mysql 'my.cnf ' lagi.

vim /etc/my.cnf

Tempelkan konfigurasi di bawah ini ke akhir baris.

[klien]
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/client-cert.pem
ssl-key=/etc /certs/client-key.pem

Simpan dan keluar, lalu mulai ulang MySQL.

systemctl restart mysqld

Hubungkan ke MySQL lagi dan periksa koneksi dan SSL diaktifkan.

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'


TAMPILKAN VARIABEL SEPERTI '%ssl%';
STATUS;

SSL telah diaktifkan dan koneksi lokal juga menggunakan SSL.

Langkah 5 - Aktifkan Koneksi Jarak Jauh

Pada langkah-langkah di atas, kami telah mengaktifkan SSL untuk server MySQL, dan koneksi lokal terpaksa menggunakan SSL. Pada langkah ini, kami akan mengaktifkan koneksi jarak jauh untuk MySQL, tetapi kami hanya mengizinkan klien yang memiliki file sertifikat yang ditandatangani oleh CA kami untuk terhubung ke server MySQL.

Edit file konfigurasi MySQL dengan vim.

vim /etc/my.cnf

Tempelkan konfigurasi ini di bawah di akhir '[mysqld] bagian '.

bind-address =*
require_secure_transport =AKTIF

Simpan file dan keluar dari editor, restart MySQL.

systemctl restart mysqld

Selanjutnya, buat pengguna baru untuk koneksi jarak jauh. Saya akan membuat pengguna baru bernama 'hakase ' dengan sandi '[email protected] ' dan berikan semua hak istimewa ke 'hakase ' pengguna. 'hakase ' pengguna hanya dapat terhubung dengan kunci Sertifikat.

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'

buat pengguna 'hakase'@'%' diidentifikasi dengan '[email protected]' REQUIRE X509;
berikan semua hak istimewa pada *.* kepada 'hakase'@'%' yang diidentifikasi oleh '[email protected]' REQUIRE X509;
hak flush;

Pengguna baru untuk koneksi jarak jauh telah dibuat.

Catatan:

Anda mungkin melihat '1 peringatan ' dalam hasil kueri mysql. Ini hanya peringatan tentang penggunaan kueri ALTER USER alih-alih GRANT karena kueri 'GRANT' tidak akan digunakan lagi pada rilis berikutnya.

Langkah 6 - Pengujian

Di bagian terakhir dari tutorial ini, kita akan menguji apakah pengguna baru bernama 'hakase' dapat terhubung ke server MySQL dari jarak jauh dengan file sertifikat. Tiga sertifikat untuk klien harus diunduh.

  1. Sertifikat CA - ca.pem
  2. Sertifikat klien - client-cert.pem
  3. Kunci klien - kunci-klien.pem

Saya telah masuk ke sistem Linux lain dan menginstal paket klien mysql di sana. Kemudian saya telah mengunduh semua file sertifikat klien dengan SCP. Sekarang saya akan terhubung ke server MySQL dengan file sertifikat.

mysql -h 10.0.15.11 -u hakase \
--ssl-ca=ca.pem \
--ssl-cert=client-cert.pem \
--ssl -key=client-key.pem -p

10.0.15.11 =Alamat IP Server MySQL.

Anda dapat melihat status koneksi dengan kueri ini di bawah.

STATUS;

Hakase pengguna dengan alamat IP 10.0.15.10 Terhubung ke server MySQL dengan alamat IP 10.0.15.11 , koneksi melalui TCP/IP pada port 3306 dan menggunakan SSL .

Saat Anda mencoba terhubung tanpa file Sertifikat, Anda akan melihat kesalahan seperti di bawah ini.

Selanjutnya, saya akan menguji dengan GUI MySQLWorkbench dari host saya.

Di bawah ini adalah konfigurasi saya - Parameter Pengaturan.

Konfigurasi SSL - Menyetel SSL.

Dan dibawah hasil koneksi dengan file SSL Client Certificate.

Seorang pengguna baru berhasil terhubung dari jarak jauh ke server database MySQL dengan koneksi SSL. Saat pengguna mencoba terhubung tanpa file Sertifikat, hasilnya akan 'ditolak '. Instalasi dan Konfigurasi MySQL dengan koneksi SSL telah berhasil.


Cent OS
  1. Cara Mengatur Ulang Kata Sandi Root MySQL Anda di CentOS 6

  2. Cara mengkonfigurasi koneksi jarak jauh dan aman untuk MySQL di Ubuntu 16.04

  3. Aktifkan SSL dan Koneksi Jarak Jauh untuk MySQL

  1. Bagaimana Cara Menginstal MySQL di CentOS 7.x?

  2. CentOS / RHEL :Cara Mengaktifkan SSL Untuk Apache

  3. Cara Mengaktifkan FTP di CentOS/RHEL 5 dan 6

  1. Cara Mengizinkan Koneksi Jarak Jauh ke MySQL

  2. Cara Mengaktifkan Log Permintaan Lambat untuk MySQL

  3. Cara mengaktifkan Opsi Debug Untuk Modul CIFS di CentOS/RHEL 7 dan 8