MySQL Management · 5 min read · Jan 29, 2026

Gestire più server MySQL da un'installazione di phpMyAdmin (utilizzando la crittografia SSL)

Gestire più server MySQL da un’installazione di phpMyAdmin (utilizzando la crittografia SSL)

Versione 1.0
Autore: Falko Timme
Seguimi su Twitter

Questo tutorial spiega come puoi gestire più server MySQL da un’installazione di phpMyAdmin. Per motivi di sicurezza, la comunicazione tra phpMyAdmin e qualsiasi server MySQL remoto utilizza la crittografia SSL (questo non è necessario per un server MySQL locale poiché la comunicazione tra phpMyAdmin e MySQL non lascia il server). phpMyAdmin è uno strumento software gratuito scritto in PHP, destinato a gestire l’amministrazione di MySQL attraverso il World Wide Web. phpMyAdmin supporta un’ampia gamma di operazioni con MySQL.

Non fornisco alcuna garanzia che questo funzionerà per te!

1 Nota preliminare

In questo tutorial mostrerò come gestire due server MySQL - uno locale (local.example.com con l’indirizzo IP 192.168.0.100 - questo è il server dove è installato phpMyAdmin) e uno remoto (remote.example.com con l’indirizzo IP 192.168.0.101) - da un’istanza di phpMyAdmin. Presumo che phpMyAdmin sia già installato (sia manualmente che tramite il gestore pacchetti della tua distribuzione) e funzionante (cioè, dovresti già essere in grado di gestire il server MySQL locale tramite phpMyAdmin) - non tratterò qui l’installazione di phpMyAdmin.

Questo tutorial è basato su Debian Wheezy/Ubuntu 12.04. Per altre distribuzioni, potrebbe essere necessario adattare alcuni percorsi, ma il principio è lo stesso.

2 Abilitare il supporto SSL sul server MySQL remoto

remote.example.com:

Accedi a MySQL…

mysql -u root -p

… e esegui il seguente comando nella shell di MySQL:

show variables like '%ssl%';

Se l’output è il seguente (entrambi have_openssl e have_ssl mostrano DISABLED)…

mysql> show variables like ’%ssl%’;
+—————+———-+
| Variable_name | Value    |
+—————+———-+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_key       |          |
+—————+———-+
7 rows in set (0.00 sec)

mysql>

… significa che MySQL è stato compilato con supporto SSL, ma attualmente non è abilitato. Per abilitarlo, esci prima dalla shell di MySQL…

quit;

… e apri /etc/mysql/my.cnf:

vi /etc/mysql/my.cnf

Scorri verso il basso fino alla sezione * Caratteristiche di sicurezza (all’interno della sezione [mysqld]) e aggiungi una riga con la parola ssl:

| | [...] # * Caratteristiche di sicurezza # # Leggi anche il manuale, se vuoi chroot! # chroot = /var/lib/mysql/ # # Per generare certificati SSL consiglio l'interfaccia grafica OpenSSL "tinyca". ssl # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem [...] | |

Riavvia MySQL…

/etc/init.d/mysql restart

… e controlla di nuovo se SSL è ora abilitato:

mysql -u root -p
show variables like '%ssl%';

L’output dovrebbe essere il seguente, il che significa che SSL è ora abilitato:

mysql> show variables like ’%ssl%’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| have_openssl  | YES   |
| have_ssl      | YES   |
| ssl_ca        |       |
| ssl_capath    |       |
| ssl_cert      |       |
| ssl_cipher    |       |
| ssl_key       |       |
+—————+——-+
7 rows in set (0.00 sec)

mysql>

Digita…

quit;

… per uscire dalla shell di MySQL.

Assicurati che OpenSSL sia installato:

apt-get install openssl

Ora controlla la tua versione di OpenSSL:

root@remote:~# openssl version
OpenSSL 1.0.1c 10 Mag 2012
root@remote:~#

Se hai - come me - la versione di OpenSSL 1.0.1c, i certificati generati da OpenSSL causeranno errori come

Sep 18 17:02:15 remote mysqld: Errore SSL: Impossibile ottenere la chiave privata da ‘/etc/mysql/newcerts/server-key.pem’
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Avviso] Impossibile configurare SSL
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Avviso] Errore SSL: Impossibile ottenere la chiave privata

(in /var/log/syslog su remote.example.com) e

root@local:/etc/mysql/newcerts# mysql –ssl-ca=/etc/mysql/newcerts/ca-cert.pem –ssl-cert=/etc/mysql/newcerts/client-cert.pem –ssl-key=/etc/mysql/newcerts/client-key.pem -h remote.example.com -u root -p
Inserisci la password:
ERRORE 2026 (HY000): Errore di connessione SSL: incompatibilità della versione del protocollo
root@local:/etc/mysql/newcerts#

(su local.example.com quando provi a stabilire una connessione crittografata a remote.example.com), almeno con MySQL 5.5; vedi:

Per risolvere questo problema, dobbiamo semplicemente costruire il nostro OpenSSL (questo non è necessario se la tua versione di OpenSSL è precedente alla 1.0.1):

cd /tmp
wget http://www.openssl.org/source/openssl-0.9.8x.tar.gz
tar xvfz openssl-0.9.8x.tar.gz
cd openssl-0.9.8x
./config –prefix=/usr/local/openssl-0.9.8
make
make install

Dopo, troverai il tuo nuovo binario OpenSSL in /usr/local/openssl-0.9.8/bin/openssl.

Ora creiamo i certificati CA, server e client di cui abbiamo bisogno per le connessioni SSL. Creo questi certificati nella directory /etc/mysql/newcerts che devo prima creare:

mkdir /etc/mysql/newcerts && cd /etc/mysql/newcerts

Crea il certificato CA (sto usando /usr/local/openssl-0.9.8/bin/openssl qui; se la versione di OpenSSL del tuo sistema è precedente alla 1.0.1, puoi semplicemente usare openssl):

/usr/local/openssl-0.9.8/bin/openssl genrsa 2048 > ca-key.pem
/usr/local/openssl-0.9.8/bin/openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem

Crea il certificato del server:

/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem
/usr/local/openssl-0.9.8/bin/openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

Crea il certificato del client:

/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem
/usr/local/openssl-0.9.8/bin/openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

L’output di…

ls -l

… dovrebbe ora apparire come segue:

root@remote:/etc/mysql/newcerts# ls -l
total 32
-rw-r–r– 1 root root 1346 Sep 18 17:52 ca-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:52 ca-key.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 client-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 client-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 client-req.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 server-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 server-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 server-req.pem
root@remote:/etc/mysql/newcerts#

Dobbiamo ora trasferire ca-cert.pem, client-cert.pem e client-key.pem al server MySQL locale (su local.example.com); prima di farlo, creiamo la directory /etc/mysql/newcerts su local.example.com:

local.example.com:

mkdir /etc/mysql/newcerts

Tornando su

remote.example.com

, possiamo trasferire i tre file a

local.example.com

come segue:

remote.example.com:

scp /etc/mysql/newcerts/ca-cert.pem [email protected]:/etc/mysql/newcerts
scp /etc/mysql/newcerts/client-cert.pem [email protected]:/etc/mysql/newcerts
scp /etc/mysql/newcerts/client-key.pem [email protected]:/etc/mysql/newcerts

Successivamente, apri /etc/mysql/my.cnf…

vi /etc/mysql/my.cnf

… e modifica la sezione * Caratteristiche di sicurezza; decommenta le righe ssl-ca, ssl-cert e ssl-key e compila i valori corretti:

| | [...] # * Caratteristiche di sicurezza # # Leggi anche il manuale, se vuoi chroot! # chroot = /var/lib/mysql/ # # Per generare certificati SSL consiglio l'interfaccia grafica OpenSSL "tinyca". ssl ssl-ca=/etc/mysql/newcerts/ca-cert.pem ssl-cert=/etc/mysql/newcerts/server-cert.pem ssl-key=/etc/mysql/newcerts/server-key.pem [...] | |

Riavvia MySQL:

/etc/init.d/mysql restart

Ora accedi di nuovo a MySQL…

mysql -u root -p

… e controlla che SSL sia abilitato e che i certificati corretti siano stati caricati:

show variables like '%ssl%';

mysql> show variables like ’%ssl%’;
+—————+————————————-+
| Variable_name | Value                               |
+—————+————————————-+
| have_openssl  | YES                                 |
| have_ssl      | YES                                 |
| ssl_ca        | /etc/mysql/newcerts/ca-cert.pem     |
| ssl_capath    |                                     |
| ssl_cert      | /etc/mysql/newcerts/server-cert.pem |
| ssl_cipher    |                                     |
| ssl_key       | /etc/mysql/newcerts/server-key.pem  |
+—————+————————————-+
7 rows in set (0.00 sec)

mysql>

Non uscire dalla shell di MySQL. Ora creeremo un utente root di MySQL che è autorizzato a connettersi da local.example.com a remote.example.com e deve utilizzare SSL:

CREATE USER ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

GRANT USAGE ON *.* TO 'root'@'192.168.0.100' REQUIRE SSL;

CREATE USER ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

GRANT USAGE ON *.* TO 'root'@'local.example.com' REQUIRE SSL;
FLUSH PRIVILEGES;

Ora puoi uscire dalla shell di MySQL:

quit;

Questo è tutto - ora abbiamo un utente root di MySQL che è autorizzato a connettersi da local.example.com a remote.example.com, ma deve utilizzare la crittografia SSL.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.