Mysql
 sql >> Database >  >> RDS >> Mysql

Come abilitare SSL/TLS per MySQL in Ubuntu

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=mysql

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