Si vous faites tourner divers services sur votre machine afin d'accéder localement à un site en développement ou à un service sur votre réseau, vous aimeriez probablement utiliser facilement un certificat TLS valide, qui soit plus joli sur votre navigateur qu'un vulgaire certificat auto-signé. 🤗

Pour cela, un outil formidablement pratique et très simple à utiliser est mkcert. Il vous permettra de générer de beaux certificats valides pour votre «localhost».

Installation

Pour l'installer, rien de plus simple. Soit il est directement disponible dans les dépôts de votre distribution préférée, ou alors vous pouvez directement clonez le dépôt git avec la commande suivante :

$ git clone https://github.com/FiloSottile/mkcert ~/.mkcert

Une fois le dépôt cloné, rendez-vous dans le répertoire avec :

$ cd ~/.mkcert

Maintenant procédez à l'installation comme ceci :

$ mkcert -install
Created a new local CA at "/home/user/.local/share/mkcert" 💥
The local CA is now installed in the system trust store! ⚡️
The local CA is now installed in the Firefox trust store (requires browser restart)! 🦊

Utilisation

La dernière étape maintenant est de générer le certificat pour les domaines que vous souhaitez utiliser selon l'exemple suivant :

$ mkcert localhost arch.wiki pi.hole fu.ture 0.0.0.0 127.0.0.1 
Using the local CA at "/home/user/.local/share/mkcert" ✨

Created a new certificate valid for the following names 📜
 - "localhost"
 - "arch.wiki"
 - "pi.hole"
 - "app.dev"
 - "fu.ture"
 - "0.0.0.0"
 - "127.0.0.1"

The certificate is at "./localhost+6.pem" and the key at "./localhost+6-key.pem" ✅

Maintenant que votre certificat https valide est généré, il n'y a plus qu'à l'utiliser sur votre serveur web, par exemple dans nginx, utilisez une configuration similaire à celle-ci :

        ssl_certificate /home/user/.mkcert/localhost+6.pem;
        ssl_certificate_key /home/user/.mkcert/localhost+6-key.pem;
        ssl_trusted_certificate /etc/ssl/certs/mkcert_root_user.pem;
        ssl_session_timeout 5m;
        ssl_session_cache shared:SSL:5m;
        ssl_prefer_server_ciphers On;
        ssl_protocols TLSv1.2;
        ssl_ciphers 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:!CAMELLIA256-SHA:!AES256-SHA:!CAMELLIA128-SHA:!AES128-SHA';
        ssl_dhparam /etc/ssl/private/dhparam4096.pem; # Create it with `openssl dhparam -out /etc/ssl/private/dhparam4096.pem 4096`
        add_header Strict-Transport-Security max-age=15768000; # six months

C'est mainenant terminé, vous pouvez maintenant profiter d'un joli cadenas vert sur tout vos services en localhost !