Cómo configurar HTTPS (certificados SSL) para asegurar el inicio de sesión de PhpMyAdmin


Para presentar esta sugerencia, detectemos el tráfico HTTP entre una máquina cliente y el servidor Debian 8 , donde cometimos el error inocente de iniciar sesión con las credenciales del usuario raíz de la base de datos en nuestro último artículo en: Change and Secure URL de inicio de sesión de PhpMyAdmin predeterminada

Como mencionamos en la sugerencia anterior, no intente hacerlo aún si no desea exponer sus credenciales. Para comenzar a detectar tráfico, escribimos el siguiente comando y presionamos 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 tardaremos mucho en darnos cuenta de que el nombre de usuario y la contraseña se enviaron por cable en formato de texto plano, como se puede ver en la salida truncada de tcpdump en imagen de abajo

Tenga en cuenta que hemos ocultado parte de la contraseña raíz con una marca azul sobre ella:

Para evitar esto, aseguremos la página de inicio de sesión con un certificado. Para hacer esto, instale el paquete mod_ssl en las distribuciones basadas en CentOS .

# yum install mod_ssl

Aunque usaremos la ruta y los nombres Debian/Ubuntu , el mismo procedimiento es válido para CentOS y RHEL si reemplaza los comandos y las rutas a continuación con los CentOS equivalentes.

Cree un directorio para almacenar la clave y el certificado:

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

Crea la clave y el certificado:

----------- 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 protected]

A continuación, verifique la clave y el certificado.

# 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

En Debian/Ubuntu , asegúrese de que Apache esté escuchando en el puerto 443 para el sitio predeterminado (/etc/apache2/sites- disponible/000-default.conf ) y agregue las 3 líneas relacionadas con SSL dentro de la declaración VirtualHost :

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

En las distribuciones basadas en CentOS , dígale a Apache que escuche en el puerto 443 y busque la directiva de escucha en /etc/httpd/conf/httpd.conf y agregue las líneas anteriores debajo de él.

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

Guarde los cambios, cargue el módulo Apache SSL en Debian/Ubuntu (en CentOS esto se carga automáticamente cuando instaló mod_ssl anterior):

# a2enmod ssl

Obligue a phpmyadmin a usar SSL , asegúrate de que la siguiente línea esté en /etc/phpmyadmin/config.inc.php o /Archivo etc/phpMyAdmin/config.inc.php :

$cfg['ForceSSL'] = true;

y reinicie el servidor web:

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

Luego, inicie su navegador web y escriba https:/& lt; dirección ip & gt;/my (aprenda cómo cambiar la URL de inicio de sesión de PhpMyAdmin) como se muestra a continuación.

rojo

Después de confirmar la excepción de seguridad y antes de iniciar sesión, comencemos a detectar el tráfico HTTP y 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

Luego ingrese usando las mismas credenciales que antes. El rastreador de tráfico solo capturará galimatías en el mejor de los casos:

Eso es todo por ahora, en el próximo artículo lo compartiremos para restringir el acceso a PhpMyAdmin con nombre de usuario/contraseña, hasta que permanezca atento a Tecmint.