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.cnfScorri 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 -pshow 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 opensslOra 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/newcertsCrea 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.pemCrea 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.pemCrea 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.pemL’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/newcertsTornando 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/newcertsscp /etc/mysql/newcerts/client-cert.pem [email protected]:/etc/mysql/newcertsscp /etc/mysql/newcerts/client-key.pem [email protected]:/etc/mysql/newcertsSuccessivamente, 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 restartOra 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.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.