Le Hollandais Volant

Localhost et HTTPS

Le site web accessible depuis l’adresse « http://localhost » correspond à la boucle local : si votre ordinateur est accessible sur le port 80 dans votre navigateur, alors le site qui s’affiche correspond à votre ordinateur.

Ceci est vrai pour chaque internaute : par conséquent, obtenir un certificat SSL/TLS pour localhost est impossible (vu que le certificat sert justement à identifier un site unique).

Généralement, on utilise localhost pour avoir un serveur sur son propre ordinateur, pour pouvoir coder en local, par exemple. Aussi, il est parfois nécessaire d’avoir du https en local (surtout maintenant que les navigateurs considèrent tous les sites sans https comme dangereux).

Pour ça : mkcert.

Ce petit programme très simple va créer un certificat, non pas auto-signé (ce que les navigateurs n’aiment pas), mais signé par votre certificat personnel ! Par conséquent, les navigateurs le verront toujours comme valide !

Pour activer tout ça sous Apache, sous Linux Mint, on va :

  • télécharger et installer mkcert
  • produire un certificat
  • activer le https dans apache (le serveur web)
  • l’activer pour localhost

Télécharger mkcert

Ça se passe ici. Perso je prends le fichier binaire directement (ici) : je prends le mkcert-v1.2.0-linux-amd64 et je l’enregistre sous le nom « mkcert » dans le dossier « ~/.mkcert ».

En ligne de commande ça donne (on crée le dossier, on récupère le fichier, on le marque comme exécutable) :

mkdir ~/.mkcert && cd ./.mkcert
wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.2.0/mkcert-v1.2.0-linux-amd64
chmod +x mkcert

Mkcert a aussi besoin de certutils, un outil tiers, qui (sous Linux Mint) se trouve dans les dépôts :

sudo apt install libnss3-tools

Produire un certificat

Là, c’est tout con, on va produire un certificat avec mkcert. Juste deux commandes.

On créer un certificat local, puis on l’applique à un certificat pour localhost :

./mkcert -install
./mkcert localhost

Cela va créer deux fichiers, localhost.pem et localhost-key.pem

Activer le HTTPS dans Apache

Ensuite, on active le site HTTPS (sur le port 443) dans Apache.

On active SSL :

sudo a2enmod ssl

On configure le site dans le fichier de conf (remplacez xed par gedit sur Ubuntu) :

sudo xed /etc/apache2/sites-available/default-ssl.conf

Trouvez la ligne suivante :

DocumentRoot /var/www/html

Et mettez-y la racine de votre site (perso c’est /var/www).
Allez ensuite sur la ligne où l’on désigne les certificats, puis remplacez les chemins vers les chemins des deux fichiers créés par mkcert (attention, mettez bien le chemin complet, sans le « ~/ », donc avec /home/$user ») :

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

SSLCertificateFile	/home/timo/.mkcert/localhost.pem
SSLCertificateKeyFile /home/timo/.mkcert/localhost-key.pem

Enregistrez le fichier et fermez Xed (ou gedit).

Activer le site

Il reste à activer le site dans Apache.

cd /etc/apache2/sites-available/
sudo a2ensite default-ssl.conf

Puis on relance le service Apache. Selon que vous utilisiez systemd ou pas, c’est l’un ou l’autre de ces deux commandes (prenez la première qui fonctionne) :

sudo systemctl restart apache2
sudo service apache2 restart

Si tout s’est bien passé, votre site est désormais actif sur le port 443, en HTTPS, et avec un certificat détecté comme valide (en vert et sans erreurs) : localhost:443 :

le site localhost est bien en vert avec le cadenas
Voilà voilà !

Sources de l’info