MySQL consente agli utenti di connettersi in modo sicuro ai database utilizzando certificati SSL/TLS. In questo articolo esamineremo la configurazione SSL di MySQL:come abilitare SSL/TLS per MySQL in Ubuntu.
Come abilitare SSL/TLS per MySQL
Ecco i passaggi per configurare le connessioni SSL in MySQL.
1. Installa MySQL
Apri il terminale ed esegui i seguenti comandi per installare MySQL.
$ sudo apt-get update $ sudo apt-get install mysql-client
Bonus Lettura:MySQL Change Collation di tutte le tabelle
2. Verifica lo stato SSL
Accedi a MySQL come root
$ mysql -uroot -p
Ti verrà richiesta la password di root. Dopo aver effettuato l'accesso, immettere il comando seguente per trovare lo stato SSL/TLS presente
mysql> SHOW VARIABLES LIKE '%ssl%'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_openssl | DISABLED | | have_ssl | DISABLED | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | | +---------------+----------+
Scoprirai che have_openssl e have_ssl entrambi hanno il valore DISABILITATO. Significa che SSL non è abilitato in MySQL.
Bonus da leggere:i migliori blog di database da seguire
3. Genera certificati SSL/TLS
Successivamente, dobbiamo generare certificati SSL/TLS e indirizzare il server MySQL alle loro posizioni. In genere, le persone usano openssl per generare certificati SSL e quindi spostarli in /var/lib/mysql che è la posizione predefinita dei file SSL per il server MySQL.
Tuttavia, MySQL 5.7 e le versioni successive sono già fornite con un'utilità mysql_ssl_rsa_setup per semplificare questo processo. Genera certificati SSL e li archivia in /var/lib/mysql.
Poiché abbiamo bisogno del processo mysql per poter leggere questi file, faremo mysql come proprietario di questi file, come mostrato di seguito.
Esegui il comando seguente per generare certificati SSL
$ sudo mysql_ssl_rsa_setup --uid=mysqlGenerating a 2048 bit RSA private key ...................................+++ .....+++
writing new private key to 'ca-key.pem'
-----
Generating a 2048 bit RSA private key ......+++ .................................+++
writing new private key to 'server-key.pem'
-----
Generating a 2048 bit RSA private key ......................................................+++ .................................................................................+++
writing new private key to 'client-key.pem'
-----
Puoi controllare i file generati eseguendo il seguente comando
$ ls -all /var/lib/mysql/*.pem
Vedrai qualcosa di simile al seguente
256740 4 -rw-r--r-- 1 mysql mysql 1078 May 1 12:24 /var/lib/mysql/server-cert.pem 256735 4 -rw------- 1 mysql mysql 1675 May 1 12:24 /var/lib/mysqlsql/ca-key.pem 256739 4 -rw-r--r-- 1 mysql mysql 451 May 1 12:24 /var/lib/mysqlsql/public_key.pem 256741 4 -rw------- 1 mysql mysql 1689 May 1 12:24 /var/lib/mysqlsql/client-key.pem 256737 4 -rw-r--r-- 1 mysql mysql 1064 May 1 12:24 /var/lib/mysqlsql/ca.pem 256743 4 -rw-r--r-- 1 mysql mysql 1048 May 1 12:24 /var/lib/mysqlsql/client-cert.pem 256736 4 -rw------- 1 mysql mysql 1625 May 1 12:24 /var/lib/mysqlsql/private_key.pem 256738 4 -rw------- 1 mysql mysql 1615 May 1 12:24 /var/lib/mysqlsql/server-key.pem
Questi sono il file del certificato SSL e le coppie di chiavi private per l'autorità di certificazione, il server MySQL e il client MySQL.
Bonus da leggere:le migliori alternative a MySQL Workbench
4. Abilita connessioni SSL in MySQL Server
Quindi, riavvia MySQL Server per abilitare SSL/TLS in MySQL.
$ sudo systemctl restart mysql
MySQL Server cercherà automaticamente i file dei certificati SSL in /var/lib/mysql all'avvio. Quindi non è necessario specificare manualmente la loro posizione nel file di configurazione di MySQL.
Bonus Leggi:Come abilitare MySQL Query Cache
5. Verifica la connessione SSL
Accedi a MySQL come prima (passaggio 2) ed esegui il comando seguente.
SHOW VARIABLES LIKE '%ssl%'; Output +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | ca.pem | | ssl_capath | | | ssl_cert | server-cert.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | server-key.pem | +---------------+-----------------+
Ora troverai have_openssl e have_ssl le variabili sono SI. Vedrai anche che ssl_ca , ssl_cert e ssl_key sono popolati con valori appropriati.
Puoi anche controllare i dettagli della tua connessione.
mysql>\s
--------------
. . .
SSL: Cipher in use is DHE-RSA-AES256-SHA
. . .
Connection: 127.0.0.1 via TCP/IP
. . .
--------------
6. Configura SSL per connessione remota (opzionale)
Se il tuo server MySQL ha connessioni remote in entrata, puoi abilitare SSL per la connessione remota e persino renderlo obbligatorio modificando il file di configurazione del server MySQL.
Apri il terminale ed esegui il comando seguente per aprire la configurazione di MySQL.
$ sudo vi /etc/mysql/my.cnf
Aggiungi [mysqld] blocco di codice come mostrato, sotto le due istruzioni !includedir.
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
# Require clients to connect either using SSL
# or through a local socket file
require_secure_transport = ON
bind-address = 0.0.0.0
Nell'ultima riga, abbiamo impostato l'indirizzo di collegamento su 0.0.0.0 per consentire le connessioni remote. Non è necessario aggiungerlo se hai già abilitato le connessioni remote.
Riavvia MySQL Server per applicare le modifiche. D'ora in poi, MySQL richiederà SSL.
Per le connessioni remote, non dimenticare di aprire la porta 443, invece della 3306 predefinita. Questo perché le connessioni SSL avvengono sulla porta 443 e non sulla 3306.
Si spera che questo articolo ti aiuti ad abilitare la connessione SSL/TLS in MySQL.