Mysql su tls su ubuntu top 10.Top 10

Mysql su tls su ubuntu top 10.Top 10
Tradizionalmente, il tuo server di database e il tuo frontend si trovavano sulla stessa rete isolata. Ciò ha permesso al frontend di parlare con il database su un canale non crittografato senza molta preoccupazione per la sicurezza. Tutto ciò è cambiato nell'ultimo anno con l'ascesa del cloud e dei sistemi distribuiti. Le tue app non sono più vincolate su una singola rete isolata. Ora, più che mai, la comunicazione tra il frontend e il database deve essere crittografata e protetta.Potresti raggiungere questo obiettivo usando una VPN per virtualizzare una rete isolata. Il frontend e il database possono far parte di questa VPN e la comunicazione tra loro sarà protetta. Oppure è possibile utilizzare TLS, per crittografare i dati inviati da e verso il database, in modo stesso i siti Web proteggono la loro comunicazione con i browser utilizzando HTTPS. Installeremo MySQL e lo configureremo in modo tale che le query e il flusso di dati tramite TLS.

Installazione di MySQL Server

La guida presuppone che tu abbia un server messo da parte per l'uso di mysql con un indirizzo IP statico accessibile, forse sul cloud o da qualche parte sulla rete locale. I seguenti comandi, in questa sottosezione, devono essere eseguiti sulla shell del server. Installiamo rapidamente e imposta mysql su Ubuntu.

$ sudo apt update
$ sudo apt Installa mysql-server
$ sudo mysql_secure_installation

L'ultimo comando eseguirà uno script per modificare alcune delle impostazioni predefinite di MySQL. In primo luogo sarebbe un prompt per installare un plug -in di convalida della password. Ciò verificherebbe se la nuova password che si sta imposta per gli utenti è abbastanza forte o no. Puoi rinunciare a questo plugin, se vuoi. Successivamente ti verrà richiesto di impostare la password dell'utente di root mysql. Vai avanti e imposta una password utente root forte.

Premere y | y per sì, qualsiasi altro tasto per il no: n
Si prega di impostare la password per root qui.
Nuova password:
Reinserire la nuova password:

Dopo questo puoi praticamente dire Per ogni altro prompt in questo script, poiché lo script rimuove l'utente di test, rimuove il database di test, disabilita l'accesso al radice remoto e infine ricarica la sua tabella di privilegio. Una volta fatto ciò, poiché abbiamo vietato l'accesso del root remoto, creiamo un database e un nuovo utente in grado di accedere a quel database in remoto senza effettivamente dover essere SSH (o accedere) nella shell UNIX/Linux del server. Ma prima di farlo, verifichiamo se la nostra build di MySQL ha TLS integrato o no.

Verifica se TLS è disponibile

TLS è disponibile in MySQL solo se MySQL è compilato per averlo integrato. Non c'è modulo dinamico da caricare. Quindi, se non sei sicuro che il tuo pacchetto MySQL abbia TLS installato o meno, puoi verificarlo in esecuzione:

$ sudo mysql
mysql> mostra variabile come '%ssl%'
+---------------+----------+
| Variabile_name | Valore |
+---------------+----------+
| have_openssl | Disabile |
| have_ssl | Disabile |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | |
+---------------+----------+
9 righe in set (0.00 sec)

Se dice che le variabili have_openssl E have_ssl avere valori impostati su DISABILITATO Quindi hai SSL e sei a posto (devi solo abilitarlo, leggendo ulteriormente). Se i valori sono impostati su NO, Quindi devi ottenere una versione diversa di MySQL dal tuo pacchetto o altrove.

Mysql> uscita

Configurazione di mysql

Per impostazione predefinita MySQL Server ascolta solo sull'interfaccia Loopback, vale a dire sull'indirizzo "LocalHost" o "127.0.0.1 ', per le connessioni remote vogliamo che ascolti anche sull'IP statico pubblico. Per farlo aprire il file, /etc/mysql/mio.Cnf e aggiungere le seguenti coppie di righe alla fine.

..
[mysqld]
requisite_secure_transport = on
Bind-Address =

Qui, sostituisci il Con l'IP reale del tuo server. In caso di dubbi su quale IP utilizzato, puoi usare 0.0.0.0 per ascoltare su tutte le interfacce. Ora riavvia il server, affinché la nuova configurazione abbia luogo.

$ sudo servizio mysql riavvio

Creazione di utenti remoti

Nota: se si desidera utilizzare il database in produzione, è probabile che il client che si connetterà a questo database - il tuo front -end - avrà un IP statico. In tal caso, sostituire il simbolo "%" percentuale con l'IP client appropriato. "%" è solo un jolly, il che significa "qualsiasi valore". Configureremo il nostro Myuser in modo che possa accedere da qualsiasi indirizzo IP (ad esempio, l'indirizzo IP mutevole della connessione a banda larga nazionale) che è, probabilmente, insicuro.

$ sudo mysql
mySQL> Crea database myDatabase;
mysql> Crea utente 'myuser'@'%' identificato da 'password' richiede ssl;
mysql> concedi tutto su mydatabase.* A 'myuser'@'%';

Sostituire 'parola d'ordine' con una password forte reale e abbiamo un utente chiamato Myuser che ha accesso completo al database mydatabase.

Abilitazione di TLS (noto anche come "SSL")

Mentre sei registrato alla shell MySQL come utente di root mysql, puoi controllare lo stato della connessione digitando \ s:

mysql> \ s
--------------
mysql ver 14.14 Distribuzione 5.7.24, per Linux (x86_64) utilizzando Editline Wrapper
ID connessione: 5
Database corrente:
Utente attuale: root@localhost
SSL: non in uso
Pager attuale: stdout
Usando Outfile: "
Usando delimitatore:;
Versione del server: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
Versione del protocollo: 10
Collegamento: localhost tramite UNIX Socket
..

Presta attenzione alle linee evidenziate sulla connessione e SSL. Mentre questo stato va bene per un accesso locale dell'utente root, quando accediamo a TLS come il Myuser Il tipo di connessione sarà superiori a TCP/IP non una presa grezza e sarà utilizzata una cifra SSL. C'è un semplice comando per raggiungere questo obiettivo. Ma prima usciamo al nostro prompt mysql.

Mysql> uscita

Ora corri,

$ sudo mysql_sssl_rsa_setup --uid = mysql
$ sudo servizio mysql riavvio


Una volta fatto questo, puoi guardare il Variabile have_SSL Ancora.

$ sudo mysql
mysql> mostra variabili come '%ssl%';
+---------------+-----------------+
| Variabile_name | Valore |
+---------------+-----------------+
| have_openssl | Sì |
| have_ssl | Sì |
| ssl_ca | circa.pem |
| ssl_capath | |
| ssl_cert | Server-Cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | Key server.pem |
+---------------+-----------------+
9 righe in set (0.01 sec)

Accedi da un client MySQL separato

Esistono nuovi parametri che indicano che il certificato e la chiave TLS sono in atto e TLS è abilitato. Ora puoi disconnettersi da questa macchina, aprire un client MySQL sul tuo computer locale, se non ne hai uno (e stai usando Debian o Ubuntu) Ottieni un client MySQL Shell:

$ sudo apt Installa mysql-client
$ mysql -u myuser -p -h

Sostituisci il Myuser E Con il tuo nome utente e IP server effettivo, inserisci la password prescelta e dovresti essere accettato nel database. Controlla la connessione:

mysql> \ s
--------------
mysql ver 14.14 Distribuzione 5.7.24, per Linux (x86_64) utilizzando Editline Wrapper
ID connessione: 5
Database corrente:
Utente corrente: remote_user@yourlocalip
SSL: cifratura in uso è dhe-rsa-aes256-sha
Pager attuale: stdout
Usando Outfile: "
Usando delimitatore:;
Versione del server: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
Versione del protocollo: 10
Connessione: tramite TCP/IP
Server caratteri: Latin1
DB Personali: Latin1
SET DI PRATTERI CLIENTI: UTF8
Conn. SETTER PER PERSONAGGI: UTF8
Porta TCP: 3306
Uptime: 13 min 52 sec
Discussioni: 2 Domande: 32 query lente: 0 Apre: 107 Tabelle a filo: 1
Tabelle aperte: 100 query al secondo AVG: 0.038
--------------

Puoi vedere che ora sta usando RSA per crittografare il traffico e la connessione è a un IP specifico su TCP/IP. Ora, la tua connessione a questo database MySQL è sicura.

Conclusione

Questo è il modo più semplice per proteggere le tue connessioni MySQL remote con TLS. Tieni presente che questo non è lo stesso di garantire un client PhpMyAdmin su TLS. Questo è TLS e HTTP combinati e richiede di proteggere l'interfaccia Web. La connessione tra PhpMyAdmin, che rende l'interfaccia utente web e il database potrebbe essere ancora non crittografato, il che va bene finché si trovano sullo stesso server.

Puoi saperne di più sulla connessione TLS, sulla CAS sottostante, sui certificati e sulla gestione delle chiavi nei documenti ufficiali di MySQL.