Com configurar HTTPS (certificats SSL) per assegurar l'inici de sessió de PhpMyAdmin


Per introduir aquest consell, analitzem el trànsit HTTP entre una màquina client i el servidor Debian 8 on hem comès l'error innocent d'iniciar sessió amb les credencials de l'usuari root de la base de dades al nostre últim article a: Canviar i protegir l'URL d'inici de sessió de PhpMyAdmin predeterminat

Com hem esmentat al consell anterior, no intenteu fer-ho encara si no voleu exposar les vostres credencials. Per començar a detectar el trànsit, vam escriure la següent comanda i vam prémer Enter:

# 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

No trigarem a adonar-nos que el nom d'usuari i la contrasenya s'han enviat per cable en format de text sense format, com podeu veure a la sortida truncada de tcpdump a la imatge següent.

Tingueu en compte que hem amagat part de la contrasenya d'arrel amb una marca blava a sobre:

Per evitar-ho, assegurem la pàgina d'inici de sessió amb un certificat. Per fer-ho, instal·leu el paquet mod_ssl a les distribucions basades en CentOS.

# yum install mod_ssl

Tot i que farem servir el camí i els noms de Debian/Ubuntu, el mateix procediment és vàlid per a CentOS i RHEL si substituïu les ordres i els camins següents amb els equivalents de CentOS.

Creeu un directori per emmagatzemar la clau i el certificat:

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

Creeu la clau i el certificat:

----------- 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
........................+++
.....................................................+++
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 

A continuació, verifiqueu la clau i el certificat.

# 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

A Debian/Ubuntu, assegureu-vos que Apache escolta al port 443 el lloc predeterminat (/etc/apache2/sites-available/000-default.conf) i afegiu les 3 línies relacionades amb SSL dins de la declaració de VirtualHost:

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

A les distribucions basades en CentOS, digueu a Apache que escolti al port 443 i cerqui la directiva Listen a /etc/httpd/conf/httpd.conf i afegiu-hi les línies anteriors a sota.

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

Deseu els canvis, carregueu el mòdul SSL Apache a les distribucions Debian/Ubuntu (a CentOS això es carrega automàticament quan heu instal·lat mod_ssl anteriorment):

# a2enmod ssl

Força phpmyadmin a utilitzar SSL, assegureu-vos que la línia següent estigui present al fitxer /etc/phpmyadmin/config.inc.php o /etc/phpMyAdmin/config.inc.php:

$cfg['ForceSSL'] = true;

i reinicieu el servidor web:

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

A continuació, inicieu el vostre navegador web i escriviu https:///my (obteniu informació sobre com canviar l'URL d'inici de sessió de PhpMyAdmin) tal com es mostra a continuació.

Important: tingueu en compte que només diu que la connexió no és segura perquè estem utilitzant un certificat autofirmat. Feu clic a Avançat i confirmeu l'excepció de seguretat:

Després de confirmar l'excepció de seguretat i abans d'iniciar la sessió, comencem a analitzar el trànsit HTTP i 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

A continuació, inicieu la sessió amb les mateixes credencials que abans. El rastrejador de trànsit només capturarà, en el millor dels casos:

Això és tot de moment, en el proper article us compartirem per restringir l'accés PhpMyAdmin amb nom d'usuari/contrasenya, fins aleshores estigueu atents a Tecmint.