Configurazione di MySQL per connessioni crittografate con OpenSSL



Il server database MySQL è estremamente flessibile e potente, quando viene utilizzato sullo stesso computer con il server web Apache i dati che si scambiano risiedono sulla stessa macchina e solitamente non sono attaccabili, mentre se poniamo il caso avessi un server con Apache nel quale girano delle pagine in PHP che aprono delle connessioni a database MySQL su altri server, in questo caso la sicurezza dei dati è importante e per questo il nostro server database può anche essere configurato per funzionare su connessioni sicure tramite SSL che consente di crittografare il flusso dei dati secondo vari protocolli di crittografazione, che non sto qui ad elencare.

La parte più importante è configurare la compilazione del pacchetto MySQL con l’opzione –with-openssl, nel caso non vogliate compilarlo manualmente le maggiori distribuzioni tra cui Ubuntu hanno questa opzione abilitata, per cui può tranquillamente essere configurato come vedremo fra poco.

Creazione certificato Linux Mint

Creazione certificato Linux Mint

La cosa da fare per abilitare le connessioni protette è creare con OpenSSL delle coppie di chiavi pubblica-privata; da shell eseguiamo i comandi per creare un certificato rsa:

openssl genrsa 2048 > ca-key.pem

openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem
Tramite questi 2 comandi abbiamo creato una Autorità di certificazione che ci consente di autofirmare le chiavi, normalmente per situazioni reali si deve acquistare un certificato. Ora creiamo la chiave pubblica che andrà sul server:

openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

A seguire quella privata dei client:

openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem

openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

Queste chiavi hanno la durata di 1000 giorni; ora basta copiarle in qualche cartella del server e del client e farlo sapere a MySQL tramite il suo file di configurazione my.cnf :

[client]
ssl-ca=…/cacert.pem
ssl-cert=…/client-cert.pem
ssl-key=…/client-key.pem

Ora configuriamo il demone:

[mysqld]
ssl-ca=…/cacert.pem
ssl-cert=…/server-cert.pem
ssl-key=…/server-key.pem

Ora il gioco è fatto e possiamo connetterci tramite la funzione mysql_connect in modo sicuro tramite SSL.

Per qualsiasi informazione potete andare sul sito di MySQL e vedere le connessioni sicure, mentre per farmi delle domande andate sul mio forum nella sezione dedicata ai database.

Annunci sponsorizzati:
Condividi su Facebook Condividi su Twitter!
  • Un articolo davvero interessante: complimenti!

  • Roberto Foglia

    Ciao,
    piacere di conoscerti, sono 4 giorni che cerco di configurare il mio ubuntu per il server mysql con ssl, ma su internet non trovo nessuna guida per risolvere il mio problema. Allora ho le variabili have_openssl e have_ssl disable, da quello che ho capito il modulo ssl è presente ma non abilitato, quindi non so’ come abilitarlo. Grazie per l’aiuto in anticipo e aspetto vostre notizie.

Pinterest