mkcert : Créer un certificat SSL fiable pour le développement local
Si vous avez déjà essayé de configurer HTTPS localement pour le développement, vous vous êtes probablement heurté à un mur de complexité. Générer un certificat auto-signé, faire en sorte que votre navigateur lui fasse confiance et gérer les avertissements peut être un vrai casse-tête, c'est là qu'intervient mkcert.
mkcert est un outil simple qui permet aux développeurs et aux administrateurs système de créer des certificats SSL de confiance locale pour le développement et les tests, ce qui élimine les avertissements de navigateur agaçants, et oui, il est gratuit, open source et fonctionne parfaitement sur Linux.
Dans ce guide, je vais vous expliquer ce qu'est mkcert, comment il fonctionne, comment l'installer et comment l'utiliser efficacement dans un environnement Linux.
Pourquoi avons-nous besoin de HTTPS en local ?
Avant de passer à mkcert, jetons un coup d'œil rapide à la raison pour laquelle vous voudriez même HTTPS dans votre environnement de développement.
- Les applications Web modernes ont besoin de HTTPS – De nombreuses API, workers de service, cookies et fonctionnalités du navigateur nécessitent des connexions sécurisées. Sans HTTPS, votre application peut se comporter différemment en développement par rapport à la production.
- Correspondance des environnements de production - Si votre configuration de production utilise HTTPS (ce qu’elle devrait), il est judicieux de tout tester dans les mêmes conditions pendant le développement.
- Compatibilité et tests des navigateurs – Chrome, Firefox et autres navigateurs modernes appliquent des politiques de sécurité plus strictes sur les origines non sécurisées (HTTP).
Mais voici le piège : les navigateurs détestent les certificats auto-signés et ils affichent des avertissements effrayants à moins que le certificat ne soit signé par une autorité de certification de confiance (AC).
Qu'est-ce que mkcert ?
mkcert est un outil en ligne de commande qui crée des certificats de développement fiables localement.
Cela le fait en :
- Créer sa propre autorité de certification (AC) sur votre système
- Faire en sorte que votre OS et vos navigateurs fassent confiance à cette CA locale
- Génération de certificats TLS signés par cette AC, afin que les navigateurs leur fassent confiance
En termes simples, mkcert agit comme votre Autorité de Certification (AC) personnelle, et votre navigateur considère les certificats qu'il génère comme valides, sans avertissements, sans astuces de navigateur, juste un HTTPS propre et de confiance pour votre développement local.
Installer mkcert sur Linux
Avant d’installer mkcert, vous devez vous assurer que les bibliothèques système nécessaires sont disponibles, ce qui aide mkcert à s’intégrer avec le magasin de certificats de votre système, en particulier pour le support de Firefox (qui utilise la base de données NSS).
sudo apt install libnss3-tools -y #Debian-based
sudo dnf install nss-tools -y #RHEL-based
sudo zypper install mozilla-nss-tools #OpenSUSE
sudo pacman -S nss #Arch
Ensuite, il y a deux principales façons d'installer mkcert : en utilisant le gestionnaire de paquets de votre distribution Linux ou en téléchargeant le binaire manuellement. Choisissez la méthode qui convient à votre configuration.
Option A : Installer mkcert via le gestionnaire de paquets
sudo apt install mkcert #Debian-based
sudo dnf install mkcert #RHEL-based
sudo zypper install mkcert #OpenSUSE
sudo pacman -S mkcert #Arch
Option B : Installation manuelle (pour d'autres distributions)
Si mkcert n'est pas disponible dans les dépôts de votre distribution, ou si vous préférez la dernière version, vous pouvez télécharger et installer manuellement le binaire.
Tout d'abord, téléchargez la dernière version binaire de mkcert depuis GitHub :
wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
Déplacez-le ensuite vers un répertoire dans le PATH de votre système et rendez-le exécutable :
sudo mv mkcert-v1.4.4-linux-amd64 /usr/local/bin/mkcert
sudo chmod +x /usr/local/bin/mkcert
Enfin, vérifiez l'installation en contrôlant la version :
mkcert --version
Si vous voyez le numéro de version, mkcert est maintenant prêt à être utilisé sur votre machine Linux.
Faire confiance à l'autorité de certification locale
Une fois que vous avez installé mkcert, l'étape suivante consiste à créer et à faire confiance à une Autorité de Certification (CA) locale, ce qui est une configuration unique qui garantit que tout certificat que vous générez en utilisant mkcert sera automatiquement reconnu par votre système et votre navigateur.
Pour commencer, il suffit d'exécuter la commande suivante dans votre terminal :
mkcert -install
La commande ci-dessus génère une nouvelle CA locale et la stocke dans votre répertoire personnel à ~/.local/share/mkcert puis, elle ajoute cette CA au magasin de confiance de votre système Linux afin que le système d'exploitation reconnaisse comme valides tous les certificats signés par celle-ci.
Si vous avez le paquet libnss3-tools installé (ce que vous devriez faire si vous utilisez Firefox), mkcert ajoutera également l’autorité de certification à la base de données de certificats interne de Firefox, ce qui signifie que Firefox fera confiance à vos certificats de développement sans aucun problème.
Lorsque la commande se termine, vous verrez une sortie similaire à celle-ci :
Created a new local CA at "/home/you/.local/share/mkcert"
The local CA is now installed in the system trust store!
Votre système est désormais configuré pour faire confiance à tous les certificats TLS/SSL générés par mkcert, ce qui élimine les avertissements habituels du navigateur que vous recevez avec les certificats auto-signés et établit les bases pour un HTTPS sécurisé et fiable lors du développement local.
Créer des certificats locaux avec mkcert
Voici maintenant la partie amusante, générer réellement un certificat SSL local en utilisant mkcert. Disons que vous développez une application web et voulez la servir en HTTPS sur myapp.local.
Vous pouvez générer un certificat pour ce domaine simplement en exécutant la commande suivante :
mkcert myapp.local
Une fois exécuté, mkcert générera deux fichiers dans votre répertoire actuel : myapp.local.pem, qui est le certificat, et myapp.local-key.pem, qui est la clé privée.
Ces fichiers peuvent être utilisés directement avec des serveurs web locaux tels que Nginx, Apache, ou même des serveurs de développement légers comme http.server de Python lorsqu'ils sont configurés pour supporter SSL.
Si vous travaillez avec des environnements de développement plus complexes impliquant plusieurs domaines, sous-domaines ou même l'accès local, mkcert vous permet de générer un certificat qui les couvre tous en une seule commande.
Par exemple :
mkcert myapp.local "*.myapp.local" localhost 127.0.0.1 ::1
La commande ci-dessus génère un certificat valable pour myapp.local, tout sous-domaine comme api.myapp.local, ainsi que pour localhost et ses équivalents IP 127.0.0.1 pour IPv4 et ::1 pour IPv6.
Utilisation de mkcert avec un serveur Nginx local
Passons en revue un exemple pratique d'utilisation de mkcert pour servir une application web locale via HTTPS en utilisant Nginx. Imaginez que vous ayez un serveur de développement local fonctionnant à http://localhost:3000, et que vous souhaitiez y accéder en toute sécurité à https://myapp.local.
Tout d'abord, vous devez mapper le domaine myapp.local à votre machine locale. Ouvrez le fichier /etc/hosts avec votre éditeur de texte préféré.
sudo nano /etc/hosts
et ajoutez la ligne suivante, qui indique à votre système de résoudre myapp.local vers l'interface de bouclage locale.
127.0.0.1 myapp.local
Ensuite, générez un certificat de développement pour ce domaine en utilisant mkcert, ce qui créera deux fichiers dans votre répertoire actuel : myapp.local.pem (le certificat) et myapp.local-key.pem (la clé privée).
mkcert myapp.local
Maintenant, configurez Nginx pour utiliser ces certificats en ouvrant votre configuration Nginx (généralement située dans /etc/nginx/sites-available/ ou /etc/nginx/conf.d/) et créez ou mettez à jour un block de serveur comme ceci :
server {
listen 443 ssl;
server_name myapp.local;
ssl_certificate /path/to/myapp.local.pem;
ssl_certificate_key /path/to/myapp.local-key.pem;
location / {
proxy_pass http://localhost:3000;
}
}
Assurez-vous de remplacer /path/to/ par le chemin réel des fichiers de certificat et de clé générés par mkcert.
Une fois la configuration en place, rechargez ou redémarrez Nginx pour appliquer les modifications :
sudo systemctl restart nginx
Ouvrez maintenant votre navigateur et visitez https://myapp.local. Vous devriez voir votre application fonctionner en toute sécurité sur HTTPS, sans aucun avertissement de certificat, exactement comme cela se passerait dans un véritable environnement de production.
Note de sécurité
Note de sécurité : mkcert est strictement destiné aux fins de développement et de test. Les certificats générés par mkcert ne doivent jamais être utilisés en environnements de production, car l'outil crée une Autorité de Certification (AC) locale qui n'est pas reconnue par les systèmes ou navigateurs globaux.
De plus, la clé privée de cette CA est stockée en texte clair sur votre machine locale, ce qui représente un risque de sécurité en cas d'utilisation abusive. Pour tout déploiement en production, utilisez toujours une autorité de certification de confiance telle que Let’s Encrypt afin de garantir une validation appropriée et la conformité à la sécurité.
Comment désinstaller mkcert et supprimer la CA locale
Si vous avez besoin un jour de nettoyer votre système ou de supprimer mkcert entièrement, le processus est simple. Tout d'abord, vous pouvez supprimer l'Autorité de Certification (CA) installée localement en exécutant la commande :
mkcert -uninstall
Cette commande supprime la racine CA générée par mkcert du magasin de confiance de votre système, ainsi que de la base de données NSS de Firefox (le cas échéant). Elle garantit que tous les certificats signés par mkcert ne sont plus reconnus comme fiables par vos navigateurs ou outils locaux.
Si vous avez installé manuellement mkcert (par exemple, en téléchargeant directement le binaire), vous devriez également retirer l'exécutable de votre système.
sudo rm /usr/local/bin/mkcert
Cela supprime le binaire mkcert de votre machine locale. Après avoir exécuté les deux commandes, mkcert et sa CA seront complètement supprimés de votre système, sans laisser de configurations de confiance résiduelles.
Conclusion
Configurer HTTPS pour le développement local n'a pas à être compliqué. Avec mkcert, les développeurs et les administrateurs système disposent d'un moyen rapide et fiable de générer des certificats de confiance locale sans les avertissements du navigateur, et sans se battre avec OpenSSL ou des chaînes de certificats complexes.