Comment configurer HTTPS (certificats SSL) pour sécuriser la connexion PhpMyAdmin
Pour introduire cette astuce, reniflons le trafic HTTP entre une machine cliente et le serveur Debian 8 où nous avons fait 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 à l’adresse suivante : Modifier et sécuriser l’URL de connexion par défaut de PhpMyAdmin
Comme nous l’avons mentionné dans le conseil précédent, n’essayez pas encore de le faire si vous ne voulez pas exposer vos informations d’identification. Pour commencer à renifler 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 nous rendre compte que le nom d’utilisateur et le mot de passe ont été envoyés sur le fil au format texte brut, comme vous pouvez le voir dans la sortie tronquée de tcpdump dans l’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 mod_ssl paquet sur les distributions basées sur CentOS.
# yum install mod_ssl
Bien que nous utilisions 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 par 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 qu’Apache est à l’é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 à l’intérieur de 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 l’avez installé mod_ssl auparavant) :
# a2enmod ssl
Forcez phpmyadmin à utiliser SSL, assurez-vous que la ligne suivante est présente dans le fichier /etc/phpmyadmin/config.inc.php ou /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://<adresse ip>/my (apprenez comment changer l’URL de connexion PhpMyAdmin) comme indiqué ci-dessous.
Important : Veuillez noter qu’il 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 nous connecter, commençons à renifler 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 à l’aide des 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 partagerons pour restreindre l’accès à PhpMyAdmin avec nom d’utilisateur/mot de passe, jusque-là restez à l’écoute de Tecmint.



