MariaDB è un database open source gratuito ed è la sostituzione drop-in più utilizzata per MySQL. È realizzato dagli sviluppatori di MySQL e intende rimanere libero sotto GNU GPL. È molto veloce, scalabile e viene fornito con un ricco set di funzionalità che lo rendono molto versatile per un'ampia varietà di casi d'uso.
Questo tutorial ti illustrerà come installare e configurare MariaDB con supporto SSL su Ubuntu 16.04.
Requisiti
- Una nuova istanza di Ubuntu 16.04 Vultr.
- Un utente non root con privilegi sudo.
- Un indirizzo IP statico 192.168.0.190 è configurato sull'istanza del server.
- Un indirizzo IP statico 192.168.0.191 è configurato sul computer client.
Passaggio 1: installare MariaDB
Per impostazione predefinita, l'ultima versione di MariaDB non è disponibile nel repository Ubuntu 16.04; quindi dovrai aggiungere il repository MariaDB al tuo sistema.
Innanzitutto, scarica la chiave con il seguente comando:
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
Successivamente, aggiungi il repository MariaDB al /etc/apt/sources.listfile:
sudo echo "deb [arch=amd64,i386,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main" >> /etc/apt/sources.list
Aggiorna l'indice apt con il seguente comando:
sudo apt-get update -y
Dopo aver aggiornato l'indice apt, installare il server MariaDB con il seguente comando:
sudo apt-get install mariadb-server -y
Avviare il server MariaDB e abilitarlo per l'avvio all'avvio:
sudo systemctl start mysql
sudo systemctl enable mysql
Successivamente, dovrai eseguire lo mysql_secure_installationscript per proteggere l'installazione di MariaDB. Questo script consente di impostare la password di root, rimuovere utenti anonimi, impedire l'accesso remoto remoto e rimuovere il database di test:
sudo mysql_secure_installation
Passaggio 2: creare un certificato SSL e una chiave privata per il server
Innanzitutto, crea una directory per archiviare tutti i file di chiavi e certificati.
sudo mkdir /etc/mysql-ssl
Quindi, modificare la directory in /etc/mysql-ssle creare il certificato CA e la chiave privata con il comando seguente:
sudo cd /etc/mysql-ssl
sudo openssl genrsa 2048 > ca-key.pem
sudo openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem
Rispondi a tutte le domande come mostrato di seguito:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:GUJ
Locality Name (eg, city) []:JND
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ENJ
Organizational Unit Name (eg, section) []:SYSTEM
Common Name (e.g. server FQDN or YOUR name) []:HITESH
Email Address []:example@example.com
Quindi, crea una chiave privata per il server con il seguente comando:
sudo openssl req -newkey rsa:2048 -days 365 -nodes -keyout server-key.pem -out server-req.pem
Rispondi a tutte le domande come hai fatto nel comando precedente.
Successivamente, esporta la chiave privata del server in una chiave di tipo RSA con il seguente comando:
sudo sudo openssl rsa -in server-key.pem -out server-key.pem
Infine, genera un certificato server utilizzando il certificato CA come segue:
sudo openssl x509 -req -in server-req.pem -days 365 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Ora puoi vedere tutti i certificati e le chiavi con il seguente comando:
ls
Dovresti vedere il seguente output:
ca-cert.pem ca-key.pem server-cert.pem server-key.pem server-req.pem
Una volta terminato, puoi procedere al passaggio successivo.
Dovresti avere tutti i certificati e una chiave privata; e ora dovrai configurare MariaDB per usare la chiave e i certificati. Puoi farlo modificando il /etc/mysql/mariadb.conf.d/50-server.cnffile:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Aggiungi le seguenti righe nella [mysqld]sezione:
ssl-ca=/etc/mysql-ssl/ca-cert.pem
ssl-cert=/etc/mysql-ssl/server-cert.pem
ssl-key=/etc/mysql-ssl/server-key.pem
##Change this value to connect the MariaDB server from another host.
bind-address = *
Salvare il file, quindi riavviare il servizio MariaDB per applicare queste modifiche:
sudo systemctl restart mysql
Ora puoi verificare se la configurazione SSL funziona o meno con la seguente query:
mysql -u root -p
MariaDB [(none)]> SHOW VARIABLES LIKE '%ssl%';
Se la configurazione ha avuto esito positivo, dovresti vedere il seguente output:
+---------------+--------------------------------+
| Variable_name | Value |
+---------------+--------------------------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | /etc/mysql-ssl/ca-cert.pem |
| ssl_capath | |
| ssl_cert | /etc/mysql-ssl/server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | /etc/mysql-ssl/server-key.pem |
+---------------+--------------------------------+
Dovresti notare che i valori have_ssle have_opensslsono abilitati nell'output sopra.
Passaggio 4: creare un utente con privilegi SSL
Creare un utente remoto che ha il privilegio di accedere al server MariaDB su SSL. Fallo eseguendo il seguente comando:
Innanzitutto, accedi alla shell MySQL:
mysql -u root -p
Successivamente, crea l'utente remotee concedi il privilegio di accedere al server su SSL.
MariaDB [(none)]>GRANT ALL PRIVILEGES ON *.* TO 'remote'@'192.168.0.191' IDENTIFIED BY 'password' REQUIRE SSL;
Quindi, svuota i privilegi con il seguente comando:
MariaDB [(none)]>FLUSH PRIVILEGES;
Infine, esci dalla shell MySQL con il seguente comando:
MariaDB [(none)]>exit;
Nota: 192.168.0.191 è l'indirizzo IP del computer dell'utente remoto (client).
Il server è ora pronto per consentire le connessioni all'utente remoto.
Passaggio 5: creare il certificato client
La configurazione lato server è completa. Successivamente, sarà necessario creare una nuova chiave e certificato per il client.
Sul computer server, creare la chiave client con il seguente comando:
sudo cd /etc/mysql-ssl
sudo sudo openssl req -newkey rsa:2048 -days 365 -nodes -keyout client-key.pem -out client-req.pem
Successivamente, elabora la chiave RSA del client con il seguente comando:
sudo openssl rsa -in client-key.pem -out client-key.pem
Infine, firmare il certificato client con il seguente comando:
sudo openssl x509 -req -in client-req.pem -days 365 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
Tutti i certificati e la chiave sono pronti per il client. Successivamente, sarà necessario copiare tutti i certificati client su qualsiasi macchina client su cui si desidera eseguire il client MariaDB.
Sarà necessario installare il client MariaDB sul computer client.
Innanzitutto, sul computer client, scarica la chiave per MariaDB con il seguente comando:
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
Quindi, aggiungi il repository MariaDB al /etc/apt/sources.listfile:
sudo echo "deb [arch=amd64,i386,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main" >> /etc/apt/sources.list
Quindi, aggiorna l'indice apt con il seguente comando:
sudo apt-get update -y
Una volta aggiornato l'indice apt, installare il client MariaDB sul computer client con il comando seguente:
sudo apt-get install mariadb-client -y
Ora crea una directory per archiviare tutti i certificati:
sudo mkdir /etc/mysql-ssl
Quindi, copiare tutti i certificati client dal computer server al computer client con il comando seguente:
sudo scp root@192.168.0.190:/etc/mysql-ssl/client-* /etc/mysql-ssl/
Quindi, dovrai configurare il client MariaDB per utilizzare SSL. Puoi farlo creando un /etc/mysql/mariadb.conf.d/50-mysql-clients.cnffile:
sudo nano /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
Aggiungi le seguenti righe:
[client]
ssl-ca=/etc/mysql-ssl/ca-cert.pem
ssl-cert=/etc/mysql-ssl/client-cert.pem
ssl-key=/etc/mysql-ssl/client-key.pem
Salva il file al termine.
Passaggio 7: verificare le connessioni remote
Ora che tutto è configurato, è tempo di verificare se è possibile connettersi correttamente al server MariaDB o meno.
Sul computer client, eseguire il comando seguente per connettersi al server MariaDB:
mysql -u remote -h 192.168.0.190 -p mysql
Ti verrà chiesto di inserire la remotepassword dell'utente. Dopo aver fornito la password, si accederà al server MariaDB remoto.
Verificare lo stato della connessione con il seguente comando:
MariaDB [mysql]> status
Dovresti vedere il seguente output:
--------------
mysql Ver 15.1 Distrib 10.2.7-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Connection id: 62
Current database: mysql
Current user: remote@192.168.0.191
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 10.0.31-MariaDB-0ubuntu0.16.04.2 Ubuntu 16.04
Protocol version: 10
Connection: 192.168.0.190 via TCP/IP
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 1 hours 31 min 31 sec
Dovresti vedere SSL: Cipher in use is DHE-RSA-AES256-SHAnell'output sopra. Ciò significa che la tua connessione è ora sicura con SSL.
Conclusione
Congratulazioni! Hai configurato correttamente un server MariaDB con supporto SSL. Ora puoi concedere l'accesso ad altri client per accedere al server MariaDB su SSL.