Générer des certificats SSL pour vos développements en local

Générer des certificats SSL pour vos développements en local

Tags : Open-source, Performance, Serveur, Sécurité
Catégorie : Programmation
Mise en ligne : 22 Juin 2020 à 17:15

Vous avez sans doute déjà été confronté à devoir mettre en place du HTTPS en local mais vous avez baissé les bras face à la tâche que cela représente ? Et bien maintenant avec mkcert vous allez pouvoir faire ça en littérallement 2 lignes de script.

Une fois que vous avez installé mkcert (que ce soit via le binaire ou via brew), vous pouvez lancer la commande :

mkcert -key-file key.pem -cert-file cert.pem example.com *.example.com

Une fois ces fichiers générés, vous allez devoir lancer la commande suivante pour installer les certificats sur votre machine afin que votre navigateur puisse les reconnaître et surtout les considérer comme valides :

mkcert -install

Et voilà, vous avez vos certificats SSL. Vous pouvez maintenant les utiliser dans votre configuration locale avec apache ou nginx. Les certificats sont valables 10 ans, donc cela laisse largement le temps de terminer votre projet.

Pour ma part j'utilise un reverse proxy nginx qui me permet d'avoir sur un environnement local plusieurs conteneurs docker qui tournent sur les mêmes ports 80 et 443 sans qu'il n'y ait de conflits. Très simple à mettre en place et en plus il gère nativement le HTTP2.

Démo

docker-compose.yml

version: '3.5'

services:
    nginx_proxy:
        image: jwilder/nginx-proxy
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - ./certificates/site.loc.pem:/etc/nginx/certs/site.loc.crt:ro
            - ./certificates/site.loc.key:/etc/nginx/certs/site.loc.key:ro
            - /var/run/docker.sock:/tmp/docker.sock:ro
        restart: unless-stopped

    nginx_site:
        build:
            context: .
            dockerfile: nginx/Dockerfile
        environment:
            - VIRTUAL_HOST=${HTTP_HOST}
            - CERT_NAME=site.loc
        volumes:
            - ..:/var/www/html
            - ./nginx/config/vhost.nginx:/etc/nginx/conf.d/default.conf:ro
        restart: unless-stopped

Dockerfile (nginx)

Je suis obligé de faire un Dockerfile car par défaut, le port 443 n'est pas exposé.

FROM nginx:1.17-alpine

EXPOSE 80
EXPOSE 443

<Laisser un commentaire/>

* Champs obligatoire