Configurer SSL pour accéder aux sites locaux en HTTPS

Pour générer un certificat SSL valide, nous allons installer et utiliser mkcert. Il s’agit d’un outil simple d’utilisation qui permet de créer des certificats approuvés localement.

Installons mkcert :

sudo pacman -S mkcert
mkcert -install

Par défaut, le fichier de configuration SSL cherche un certificat nommé server.crt dans /etc/httpd/conf/. Plutôt que de modifier ce chemin, nous allons créer le fichier demandé. Il s’appliquera à « localhost ».

sudo mkcert -cert-file /etc/httpd/conf/server.crt -key-file /etc/httpd/conf/server.key localhost

Nous allons modifier la configuration d’Apache pour activer SSL en dé-commentant trois lignes.

sudo nano /etc/httpd/conf/httpd.conf
# À titre indicatif, à la ligne 93 lors de mon installation.
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

# À titre indicatif, à la ligne 155 lors de mon installation.
LoadModule ssl_module modules/mod_ssl.so

# À titre indicatif, à la ligne 535 lors de mon installation.
Include conf/extra/httpd-ssl.conf

Maintenant, nous allons modifier le fichier de configuration de SSL :

sudo nano /etc/httpd/conf/extra/httpd-ssl.conf
# À titre indicatif, vers la ligne 125 lors de mon installation.
# Remplacer :
ServerName www.example.com:443

# Par :
ServerName localhost:443

Modifier la destination de localhost

Par défaut, localhost pointe vers /srv/http. Je souhaite le rediriger vers un dossier /srv/http/default.

# Je crée le dossier :
sudo mkdir /srv/http/default
# J’édite le fichier de configuration des serveurs virtuels
sudo nano /etc/httpd/conf/extra/httpd-vhosts.conf

Je remplace l’exemple par :

<VirtualHost *:80>
    DocumentRoot "/srv/http/default"
    ServerName localhost
    ErrorLog "/var/log/httpd/localhost-error_log"
    CustomLog "/var/log/httpd/localhost-access_log" common
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/srv/http/default"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "/etc/httpd/conf/server.crt"
    SSLCertificateKeyFile "/etc/httpd/conf/server.key"
    ErrorLog "/var/log/httpd/localhost-error_log"
    CustomLog "/var/log/httpd/localhost-access_log" common
</VirtualHost>

Mettre en place un espace de travail dans notre home

Par défaut, le répertoire d’Apache se situe dans /srv/http/. Nous pourrions nous en contenter, mais il faut les droits nécessaires pour y écrire des fichiers et dossiers. Je préfère mettre en place un dossier dans ma home pour travailler.

Pour commencer, nous allons créer ce répertoire et donner les droits à Apache pour le lire.

Nous créons le dossier puis nous vérifions que le droit d’exécution est bien présent pour Apache :

mkdir /home/monDossierDeTravail
sudo chmod o+x ~/monDossierDeTravail

Ensuite, nous devons donner à Apache les droits d’accès à notre home. La solution la plus simple serait de faire un chmod sur notre home mais ce n’est pas la meilleure approche en termes de sécurité.

Nous allons utiliser la liste de contrôle d’accès. Elle permet de gérer les droits d’accès de n’importe quel utilisateur ou groupe. Normalement, le paquet est installé puisqu’il s’agit d’une dépendance de systemd, mais mieux vaut vérifier.

Pour commencer, nous vérifions le point de montage du système de fichier :

lsblk -f
# Il faut repérer à quelle lettre+chiffre est associé « / », ex : sdb1

Maintenant, saisissez la commande ci-dessous en remplaçant sdXY par la valeur trouvée précédemment :

sudo tune2fs -l /dev/sdXY | grep "Default mount options:"
# Si acl est présent, vous devriez lire :
#output#Default mount options:    user_xattr acl

Il faut vérifier que cette option de montage n’est pas remplacée ailleurs. Pensez à changer sdXY :

cat /proc/mounts | grep -i "/dev/sdXY"
# Vous devriez lire quelque chose comme :
#output#/dev/sdXY / ext4 rw,noatime,discard 0 0
# Il faut vérifier qu’il n’y ait pas noacl affiché.

Il est possible de définir l’option de montage par défaut en utilisant cette commande (en replaçant sdXY) :

sudo tune2fs -o acl /dev/sdXY

Maintenant que ces vérifications sont faites, nous pouvons configurer les droits d’accès d’Apache sur notre home. Apache utilise le nom d’utilisateur http.

# Remplacez username.
setfacl -m "u:http:--x" /home/username

Vous pouvez vérifier les changements de permission avec :

getfacl /home/username

Si vous avez besoin de donner à Apache les droits d’écriture sur un dossier ou sur un fichier, vous pouvez utiliser la commande :

setfacl -dm "u:http:rwx" /home/username/dossierDeTravail/projet1/leRepertoire

Créer et configurer le serveur virtuel

Pour créer un serveur virtuel (« virtual host »), nous devons modifier la configuration d’Apache.

sudo nano /etc/httpd/conf/httpd.conf
# À titre indicatif, à la ligne 518 lors de mon installation.
# Décommenter :
Include conf/extra/httpd-vhosts.conf

Nous allons maintenant créer le répertoire pour les fichiers de configuration des serveurs virtuels.

sudo mkdir /etc/httpd/conf/vhosts

Maintenant, imaginons que nous travaillons sur un projet se nommant « Projet » (original !). Nous allons créer un certificat pour notre site « projet.test ». Pour cela, nous commençons par créer un répertoire qui contiendra tous nos certificats locaux :

mkdir /home/username/.local-certificates/

Puis, nous générons le certificat pour « projet.test » :

mkcert -cert-file ~/.local-certificates/projet.test.pem -key-file ~/.local-certificates/projet.test-key.pem projet.test *.projet.test

Enfin, nous allons créer un fichier de configuration se nommant « projet.test » :

sudo nano /etc/httpd/conf/vhosts/projet.test

Dans ce fichier, nous allons insérer :

<VirtualHost *:80>
    ServerAdmin webmaster@projet.test
    DocumentRoot "/srv/http/projet.test/htdocs/"
    ServerName www.projet.test
    ServerAlias *.projet.test
    ErrorLog "/srv/http/projet.test/logs/error.log"
    CustomLog "/srv/http/projet.test/logs/access.log" combined
    <Directory /srv/http/projet.test/htdocs/>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin webmaster@projet.test
    DocumentRoot "/srv/http/projet.test/htdocs/"
    ServerName www.projet.test:443
    ServerAlias *.projet.test:443
    SSLEngine on
    SSLCertificateFile "/home/username/.local-certificates/projet.test.pem"
    SSLCertificateKeyFile "/home/username/.local-certificates/projet.test-key.pem"
    ErrorLog "/srv/http/projet.test/logs/error.log"
    CustomLog "/srv/http/projet.test/logs/access.log" combined
    <Directory /srv/http/projet.test/htdocs/>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Si votre projet ne se nomme pas « Projet », il faudra évidemment changer toutes les occurrences dans le fichier. Vous devez également modifier le chemin vers les fichiers du certificat SSL : /home/username/.local-certificates/ en remplaçant username et le dossier si vous l’avez nommé différemment.

Vous pouvez également voir dans le fichier, que nous avons défini deux sous-dossiers dans notre projet : htdocs et logs. Le premier correspond au répertoire public (j’utilise ce nom parce que je suis hébergé par Gandi). Le second contiendra nos fichiers logs.

Nous allons créer ces dossiers ainsi que le dossier de notre projet. Cependant, nous n’allons pas le placé dans /srv/http/ mais dans /home/username/dossierDeTravail/. Il s’agit bien évidemment du répertoire que nous avons configuré précédemment.

sudo mkdir -p /home/username/dossierDeTravail/projet.test/htdocs
sudo mkdir -p /home/username/dossierDeTravail/projet.test/logs

Pour que le chemin spécifié dans le fichier de configuration corresponde, nous allons créer un lien virtuel :

ln -s /home/username/dossierDeTravail/projet.test/ /srv/http/

Nous retournons dans le fichier de configuration d’Apache pour activer notre serveur virtuel :

sudo nano /etc/httpd/conf/httpd.conf
# À la fin du fichier, nous ajoutons :
#Enabled Vhosts:
Include conf/vhosts/projet.test

Il faut maintenant modifier le fichier « hosts » :

sudo nano /etc/hosts
// Nous ajoutons à la fin du fichier :
127.0.0.1       www.projet.test

LAMP est maintenant fonctionnel

Si vous avez suivi toutes les étapes, votre serveur LAMP devrait maintenant être entièrement fonctionnel. Il ne vous reste plus qu’à démarrer votre projet localement !

Pour y accéder dans votre navigateur, il suffit de saisir « projet.test » dans la barre d’adresse de votre navigateur.

J’utilise le TLD .test parce qu’il s’agit d’un domaine de premier niveau reservé. Il ne risque pas d’y avoir un conflit avec domaine accessible par Internet. De plus, il est plus court que .example ou .localhost ; je préfère.

Aucun commentaire sur “Installer LAMP sur Manjaro : Virtual Host & SSL” pour le moment.

S'abonner aux commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *