Installation du stack LAMP.

Déjà, c’est quoi LAMP ? C’est un acronyme pour Linux Apache Mysql Php et donc, nous allons installer cette “suite logicielle” qui va nous permettre en mettre en place ces différents éléments pour les faire fonctionner ensemble !

Pour l’installation nous allons utiliser la commande suivante, qui sera expliqué juste en dessous:

sudo apt install apache2 php mysql-server php-mysql libapache2-mod-php

Nous avons installé ici 5 paquets (ou logiciels) différents:

  1. apache2 Sera notre serveur Web, c’est lui qui sera chargé d’accueillir les requêtes des clients.
  2. php C’est l’interpréteur pour le langage PHP, c’est lui qui sera chargé de traiter les scripts PHP.
  3. mysql-server C’est notre serveur de base de donnée.
  4. php-mysql C’est un “connecteur” qui va permettre au scripts en PHP d’intéragir avec notre base de donnée.
  5. libapache2-mod-php C’est ce qui va permettre à notre serveur Apache d’utiliser des scripts PHP, en effet, par défaut, Apache n’est pas capable d’interpréter le code PHP.

creation vm

Si tout s’est bien passé, vous devriez être en mesure d’accéder au serveur Web de votre VM depuis votre propre PC :) Dans mon cas, l’adresse IP de ma VM était 10.0.0.147, je peux donc dans mon navigateur accéder à l’adresse:

http://10.0.0.147

Et une fois à cette adresse vous devriez voir la page par défaut d’Apache sur Ubuntu !

creation vm

Votre serveur est maintenant “prêt a l’emploi” sur votre VM ! La racine de votre site web est situé dans le dossier /var/www/html dans lequel vous devriez trouver un unique fichier index.html qui correspond à la page par défaut, que vous pouvez supprimer et remplacer par la votre ! :)

ls /var/www/html

creation vm

Maintenant que nous avons mis en place un serveur Apache2 pour servir les requêtes web de nos utilisateurs, cependant, le http a l’heure actuelle est considéré comme n’étant pas sécurisé. Nous allons donc mettre en place un certificat auto-signé pour chiffrer les communications entre notre serveur et nos client.

Pour commencer, nous allons vérifier que nous avons bien le paquet openssl d’installé et sa version:

openssl version

OpenSSL 1.1.1f 31 Mar 2020

Donc ici, pas de problème openssl est bien disponible, je vais pouvoir générer mes clés SSL !

Nous allons utiliser openssl pour générer nos deux clés, privée, et publique:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/my.key -out /etc/ssl/certs/my.crt

Dans cet exemple, les arguments -keyout représente la clé privée, et le chemin de l’argument -out représente la clé publique Une fois la commande validée, vous allez devoir répondre à certaines question, en l’occurrence, je vais simplement appuyer sur entrée à chaque questions pour garder les paramètres par défaut, étant donne que c’est un simple certificat local que je souhaites mettre en place, dans le cas d’un vrai serveur avec un nom de domaine, il faudrait évidemment mettre en place le bon nom de domaine dans mon certificat.

Nos certificats sont donc crées et disponibles à ces emplacements:

Clé privée: /etc/ssl/private/my.key

Clé publique: /etc/ssl/certs/my.crt

Maintenant que nos clés publiques sont crées, nous allons pouvoir les utiliser dans Apache, pour mettre en place une connexion sécurisée HTTPS.

Mais avant de pouvoir l’utiliser, nous allons avoir besoin d’activer le module SSL d’Apache, pour qu’il soit capable de traiter les clients entrants sur le port ssl/http, a savoir le port 443, pour l’activer, nous allons utiliser la commande:

sudo a2enmod ssl

Cette commande (qui veut dire Apache2 Enable Mod) va activer le module SSL de notre serveur Apache, nous devons ensuite relancer le service Apache pour prendre en compte cette modification avec:

sudo systemctl restart apache2

Cependant, l’activation du module SSL ne sera pas suffisante pour traiter les requêtes https, en effet nous allons devoir mettre en place le VHOST relatif en HTTPS.

Pour ça, nous allons activer le VHOST par défaut pour le https (il est situé dans /etc/apache2/sites-available) avec la commande:

sudo a2ensite default-ssl

Une fois activé, vous devriez retrouver le fichier default-ssl.conf dans /etc/apache2/sites-enabled, nous allons le modifier:

sudo nano /etc/apache2/sites-enabled/default-ssl.conf
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerAdmin webmaster@localhost

                DocumentRoot /var/www/html

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on

                SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
                SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>

        </VirtualHost>
</IfModule>

Dans ce fichier, ce qui va m’intéresser, c’est de remplacer les clés SSL par défaut, par celles que nous avons générées plus tôt donc si je reprendre l’emplacement de mes clés cela nous donne:

<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerAdmin webmaster@localhost

                DocumentRoot /var/www/html

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on

                SSLCertificateFile      /etc/ssl/certs/my.crt
                SSLCertificateKeyFile /etc/ssl/private/my.key

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>

        </VirtualHost>
</IfModule>

Nous pouvons donc maintenant sauvegarder ce fichier, puis relancer encore une fois le service Apache:

sudo systemctl restart apache2

Et normalement, après redémarrage de votre service apache, vous devriez pouvoir accéder, en https à votre serveur par son ip :)

https://10.0.0.147

2021-01-25_16-16.png

Mais bien entendu, nous allons avoir une alerte du navigateur, attention toutefois, contrairement a ce que dit le navigateur, la connexion entre le client et le serveur est bien chiffrée et sécurisée, cependant, étant donné que ce certificat est auto-signe, il n’est pas reconnu par les navigateurs.

Voilà, vous devriez normalement avoir terminé la mise en place de votre certificat SSL sur votre serveur Web sur Ubuntu ! :)