Auto-générer un certificat et configurer Traefik pour utiliser le SSL en Local 🔐

Clément Demily
3 min readMay 14, 2019

Bonjour à tous ! 👋

Après avoir vu dans un précédent billet comment utiliser Traefik avec Docker pour avoir des noms de domaines personnalisés, nous allons désormais voir comment auto-générer un certificat SSL puis configurer Traefik pour l’utiliser. Une fois cela fait nous pourrons alors accéder a nos applications via https.

Création des fichiers de configuration

Pour générer facilement les fichiers nécessaires, vous aurez besoin de créer ces deux fichiers de configuration.

root.cnf

[ req ]prompt             = no
string_mask = default
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = x509_ext
[ req_distinguished_name ]countryName = fr
organizationName = MyLocalDev
commonName = MyLocalDev Root CA
[ x509_ext ]basicConstraints=critical,CA:true,pathlen:0
keyUsage=critical,keyCertSign,cRLSign

server.cnf

[ req ]prompt             = no
string_mask = default
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = x509_ext[ req_distinguished_name ]countryName = fr
organizationName = MyLocalDev
commonName = Certificat Applications MyLocalDev
[ x509_ext ]keyUsage=critical,digitalSignature,keyAgreementsubjectAltName = @alt_names[ alt_names ]
DNS.1 = traefik.test

Quelques indications complémentaires sur organizationName et commonName : ce sont les informations qui apparaîtrons dans les détails du certificat (lorsque vous l’inspecterez avec votre navigateur).

La section alt_names permet de définir la liste des DNS qui seront validés par le certificat. Pour l’exemple, nous utiliserons le DNS “traefik.test”. C’est ici qu’il faudra ajouter les noms des domaine que vous voulez ajouter.

Générer le certificat SSL

Une fois nos fichiers de configuration créés, nous allons utiliser les commandes suivantes :

openssl req -x509 -new -keyout root.key -out root.cer -config root.cnf
openssl req -nodes -new -keyout server.key -out server.csr -config server.cnf
openssl x509 -days 825 -req -in server.csr -CA root.cer -CAkey root.key -set_serial 123 -out server.cer -extfile server.cnf -extensions x509_ext

à partir d’ici, je vais vous décrire la méthode à suivre sur mac

Une fois cette étape passée :

open .

Vous allez devoir double-cliquer sur le fichier “server.cer”. Une fenêtre système s’affichera et vous devrez alors double-cliquer sur l’entrée “Certificat Applications MyLocalDev”.

Une fois cela fait, vous devrez cliquer sur la petite flèche “se fier” et changer la valeur du select par “Toujours approuver”. Vous devrez ensuite taper votre mot de passe système pour valider.

Voici quelques pistes pour réaliser cette étape sur unix

Mise à jour du fichier docker-compose

traefik-ssl.toml

defaultEntryPoints = ["https", "http"][accessLog]
[traefikLog]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[entryPoints.https.tls.defaultCertificate]
certFile = "/certs/server.cer"
keyFile = "/certs/server.key"
[web]
address = ":8080"
[web.auth.basic]
users = ["admin:$apr1$o1HmXW0i$wWgVewL1kLu9gaqmMDh6u/"]
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "test"
watch = true
exposedbydefault = true

docker-compose.traefik.yml

version: "3"services:
proxy:
image: traefik:1.7.19
networks:
- traefik
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "./traefik-ssl.toml:/traefik.toml"
- "./certs/:/certs/"
restart: unless-stopped
labels:
- "traefik.frontend.rule=Host:traefik.test"
- "traefik.frontend.entryPoints=http,https"
- "traefik.backend=traefik"
- "traefik.port=8080"
networks:
traefik:
external:
name: traefik

Quelques précisions :

  • je pars du principe que les fichiers server.cer et server.key se trouve dans un dossier “certs”, à la racine du fichier docker-compose.
  • de la même façon, le fichier traefik-ssl.toml doit se trouver au même niveau que le fichier docker-compose.

Lancer Traefik via docker-compose

Il ne vous reste plus qu’a lancer cette dernière commande :

docker-compose -f docker-compose.traefik.yml up

Vous pouvez maintenant consulter l’adresse suivante : https://traefik.test/

Et voilà ! 👏

Resources et liens utiles

--

--