Búsqueda de sitios web

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


Para presentar este consejo, analicemos el tráfico HTTP entre una máquina cliente y el servidor Debian 8 donde cometimos el inocente error de iniciar sesión utilizando las credenciales del usuario raíz de la base de datos en nuestro último artículo en: Cambiar y proteger URL de inicio de sesión predeterminada de PhpMyAdmin

Como mencionamos en el consejo anterior, no intentes hacer esto todavía si no quieres exponer tus credenciales. Para comenzar a rastrear el 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 nos llevará mucho tiempo darnos cuenta de que el nombre de usuario y la contraseña se han enviado por cable en formato de texto sin formato, como puede ver en la salida truncada de tcpdump en el archivo imagen a continuación.

Tenga en cuenta que hemos ocultado parte de la contraseña root con una marca azul encima:

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

yum install mod_ssl

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

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]

Cree 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
Salida de muestra
........................+++
.....................................................+++
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ó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 distribuciones basadas en CentOS, indique a Apache que escuche en el puerto 443 y busque la directiva Listen en /etc/httpd/conf/. httpd.conf y agregue las líneas anteriores debajo.

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

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

a2enmod ssl

Fuerce a phpmyadmin a usar SSL, asegúrese de que la siguiente línea esté presente en /etc/phpmyadmin/config.inc.php o / etc/phpMyAdmin/config.inc.php archivo:

$cfg['ForceSSL'] = true;

y reinicie el servidor web:

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

A continuación, inicie su navegador web y escriba https:///my (aprenda cómo cambiar la URL de inicio de sesión de PhpMyAdmin) como se muestra a continuación.

Importante: Tenga en cuenta que solo dice que la conexión no es segura porque estamos utilizando un certificado autofirmado. Haga clic en Avanzado y confirme la excepción de seguridad:

Después de confirmar la excepción de seguridad y antes de iniciar sesión, comencemos a rastrear 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 inicie sesión con las mismas credenciales que antes. El rastreador de tráfico sólo capturará, en el mejor de los casos, galimatías:

Eso es todo por ahora, en el próximo artículo le compartiremos cómo restringir el acceso a PhpMyAdmin con nombre de usuario/contraseña, hasta entonces estad atentos a Tecmint.