Recherche de site Web

Comment configurer HTTPS (certificats SSL) pour sécuriser la connexion PhpMyAdmin


Pour présenter cette astuce, analysons le trafic HTTP entre une machine client et le serveur Debian 8 sur lequel nous avons commis l'erreur innocente de nous connecter en utilisant les informations d'identification de l'utilisateur racine de la base de données dans notre dernier article sur : Modifier et sécuriser URL de connexion PhpMyAdmin par défaut

Comme nous l’avons mentionné dans le conseil précédent, n’essayez pas de le faire pour l’instant si vous ne souhaitez pas exposer vos informations d’identification. Pour commencer à détecter le trafic, nous avons tapé la commande suivante et appuyé sur Entrée :

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

Il ne nous faudra pas longtemps pour réaliser que le nom d'utilisateur et le mot de passe ont été envoyés par réseau au format texte brut, comme vous pouvez le voir dans la sortie tronquée de tcpdump dans le fichier image ci-dessous.

Veuillez noter que nous avons masqué une partie du mot de passe root avec une marque bleue dessus :

Pour éviter cela, sécurisons la page de connexion avec un certificat. Pour ce faire, installez le package mod_ssl sur les distributions basées sur CentOS.

yum install mod_ssl

Bien que nous utiliserons le chemin et les noms Debian/Ubuntu, la même procédure est valable pour CentOS et RHEL si vous remplacez les commandes et les chemins ci-dessous avec les équivalents CentOS.

Créez un répertoire pour stocker la clé et le certificat :

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

Créez la clé et le 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
Exemple de sortie
........................+++
.....................................................+++
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 

Ensuite, vérifiez la clé et le 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

Dans Debian/Ubuntu, assurez-vous que Apache écoute sur le port 443 pour le site par défaut (/etc/apache2/sites- available/000-default.conf) et ajoutez les 3 lignes liées à SSL dans la déclaration VirtualHost :

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

Dans les distributions basées sur CentOS, dites à Apache d'écouter sur le port 443 et recherchez la directive Listen dans /etc/httpd/conf/ httpd.conf et ajoutez les lignes ci-dessus en dessous.

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

Enregistrez les modifications, chargez le module SSL Apache sur les distributions Debian/Ubuntu (dans CentOS, il est chargé automatiquement lorsque vous installez mod_ssl. plus tôt) :

a2enmod ssl

Forcez phpmyadmin à utiliser SSL, assurez-vous que la ligne suivante est présente dans /etc/phpmyadmin/config.inc.php ou / Fichier etc/phpMyAdmin/config.inc.php :

$cfg['ForceSSL'] = true;

et redémarrez le serveur web :

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

Ensuite, lancez votre navigateur Web et tapez https:///my (découvrez comment modifier l'URL de connexion PhpMyAdmin) comme indiqué ci-dessous.

Important : Veuillez noter que cela indique uniquement que la connexion n'est pas sécurisée car nous utilisons un certificat auto-signé. Cliquez sur Avancé et confirmez l'exception de sécurité :

Après avoir confirmé l'exception de sécurité et avant de vous connecter, commençons à détecter le trafic HTTP et 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

Connectez-vous ensuite en utilisant les mêmes informations d’identification que précédemment. Le renifleur de trafic ne capturera au mieux que le charabia :

C'est tout pour l'instant, dans le prochain article, nous vous expliquerons comment restreindre l'accès à PhpMyAdmin avec un nom d'utilisateur/mot de passe, en attendant restez à l'écoute de Tecmint.