Ricerca nel sito web

Come impostare HTTPS (certificati SSL) per proteggere l'accesso a PhpMyAdmin


Per introdurre questo suggerimento, annusiamo il traffico HTTP tra una macchina client e il server Debian 8 dove abbiamo commesso l'innocente errore di accedere utilizzando le credenziali dell'utente root del database nel nostro ultimo articolo su: Cambia e proteggi URL di accesso PhpMyAdmin predefinito

Come accennato nel suggerimento precedente, non tentare ancora di farlo se non vuoi esporre le tue credenziali. Per iniziare a sniffare il traffico, abbiamo digitato il seguente comando e premuto Invio:

tcpdump port http -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user ' --line-buffered -B20

Non ci vorrà molto per renderci conto che il nome utente e la password sono stati inviati via cavo in formato testo normale, come puoi vedere nell'output troncato di tcpdump nel file immagine qui sotto.

Tieni presente che abbiamo nascosto parte della password root con un segno blu sopra:

Per evitare ciò, proteggiamo la pagina di accesso con un certificato. Per fare ciò, installa il pacchetto mod_ssl sulle distribuzioni basate su CentOS.

yum install mod_ssl

Anche se utilizzeremo il percorso e i nomi Debian/Ubuntu, la stessa procedura è valida per CentOS e RHEL se sostituisci i comandi e i percorsi seguenti con gli equivalenti CentOS.

Crea una directory per archiviare la chiave e il certificato:

mkdir /etc/apache2/ssl    [On Debian/Ubuntu based systems]
mkdir /etc/httpd/ssl      [On CentOS based systems]

Crea la chiave e il certificato:

----------- On Debian/Ubuntu based systems ----------- 
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

----------- On CentOS based systems ----------- 
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/apache.key -out /etc/httpd/ssl/apache.crt
Uscita del campione
........................+++
.....................................................+++
writing new private key to '/etc/httpd/ssl/apache.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:IN
State or Province Name (full name) []:Maharashtra
Locality Name (eg, city) [Default City]:Mumbai
Organization Name (eg, company) [Default Company Ltd]:TecMint
Organizational Unit Name (eg, section) []:TecMint
Common Name (eg, your name or your server's hostname) []:TecMint
Email Address []:[email 

Successivamente, verifica la chiave e il certificato.

cd /etc/apache2/ssl/   [On Debian/Ubuntu based systems]
cd /etc/httpd/ssl/     [On CentOS based systems]
ls -l

total 8
-rw-r--r--. 1 root root 1424 Sep  7 15:19 apache.crt
-rw-r--r--. 1 root root 1704 Sep  7 15:19 apache.key

In Debian/Ubuntu, assicurati che Apache sia in ascolto sulla porta 443 per il sito predefinito (/etc/apache2/sites- available/000-default.conf) e aggiungi le 3 righe relative a SSL all'interno della dichiarazione VirtualHost:

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Nelle distribuzioni basate su CentOS, chiedi ad Apache di ascoltare sulla porta 443 e cerca la direttiva Listen in /etc/httpd/conf/ httpd.conf e aggiungi le righe sopra sotto.

SSLEngine on
SSLCertificateFile /etc/httpd/ssl/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl/apache.key

Salva le modifiche, carica il modulo SSL Apache sulle distribuzioni Debian/Ubuntu (in CentOS viene caricato automaticamente quando hai installato mod_ssl forte> prima):

a2enmod ssl

Forza phpmyadmin a utilizzare SSL, assicurati che la seguente riga sia presente in /etc/phpmyadmin/config.inc.php o / file etc/phpMyAdmin/config.inc.php:

$cfg['ForceSSL'] = true;

e riavviare il server web:

systemctl restart apache2   [On Debian/Ubuntu based systems]
systemctl restart httpd     [On Debian/Ubuntu based systems]

Successivamente, avvia il tuo browser web e digita https:///my (scopri come modificare l'URL di accesso PhpMyAdmin) come mostrato di seguito.

Importante: tieni presente che sta solo dicendo che la connessione non è sicura perché stiamo utilizzando un certificato autofirmato. Fai clic su Avanzate e conferma l'eccezione di sicurezza:

Dopo aver confermato l'eccezione di sicurezza e prima di accedere, iniziamo a sniffare il traffico HTTP e HTTPS:

tcpdump port http or port https -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user ' --line-buffered -B20

Quindi accedi utilizzando le stesse credenziali di prima. Lo sniffer del traffico catturerà nella migliore delle ipotesi solo cose senza senso:

Per ora è tutto, nel prossimo articolo ti spiegheremo come limitare l'accesso a PhpMyAdmin con nome utente/password, fino ad allora resta sintonizzato su Tecmint.