Générez automatiquement vos certificats SSL avec traefik (OVH)

Utilisez-le HTTPS sur docker !
Vendredi 28 août 2020

Dans ce post blog, je vais vous présenter comment automatiser la génération de vos certificats SSL sur vos différents domaines avec Docker, Traefik et OVH.

Première étape : créer son application OVH

Créez une application OVH (Europe) ou (Canada/USA) en cliquant sur ces liens. Donnez un nom et une description à votre application.

Gardez précieusement les clés APPLICATION_KEY et APPLICATION_SECRET affichées sur l’interface web.

Optionnel: une fois l'application créée, vous pouvez vérifier qu'elle existe avec la console OVH. Envoyez une requête sur le lien: /me/api/application.

Deuxième étape : ajouter les droits à l’application

La deuxième étape va consister à donner les droits de modifier les entrées DNS pour le “DNS challenge” de Let’s Encrypt.

Copiez-collez cette commande en remplaçant “mon-domaine” par le vôtre (mettez ”*” si votre application doit gérer plusieurs domaines) et ‘flkDLo4D5lDBSZld’ par votre clé d’application:

Terminal window
curl -XPOST -H "X-Ovh-Application: flkDLo4D5lDBSZld" -H "Content-type: application/json" https://eu.api.ovh.com/1.0/auth/credential -d '{
"accessRules":[
{
"method":"POST",
"path":"/domain/zone/mon-domaine.com/record"
},
{
"method":"POST",
"path":"/domain/zone/mon-domaine.com/refresh"
},
{
"method":"DELETE",
"path":"/domain/zone/mon-domaine.com/record/*"
}
],
"redirection":"https://www.mon-domaine.com"
}'

(Version minifiée ici:)

Terminal window
curl -XPOST -H "X-Ovh-Application: flkDLo4D5lDBSZld" -H "Content-type: application/json" https://eu.api.ovh.com/1.0/auth/credential -d '{"accessRules":[{"method":"POST","path":"/domain/zone/mon-domaine.com/record"},{"method":"POST","path":"/domain/zone/mon-domaine.com/refresh"},{"method":"DELETE","path":"/domain/zone/mon-domaine.com/record/*"}], "redirection": "https://www.mon-domaine.com"}'

Regardez ce que la commande vous retourne. Allez sur le lien retourné pour valider votre décision, et garder la CONSUMER_KEY.

Troisième étape : lancer docker !

Allez sur votre serveur, et créez votre docker-compose.yml comme suit, modifiez la clé acme.email, le nom d’hôte http.routers.whoami.rule ainsi que les variables d’environnement en remplaçant celles-ci par les clés conservées dans les premières et deuxièmes étapes.

docker-compose.yaml
version: "3.3"
services:
traefik:
image: "traefik:v2.2"
container_name: "traefik"
command:
# - "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.dnschallenge=true"
- "--certificatesresolvers.myresolver.acme.dnschallenge.provider=ovh"
# - "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.myresolver.acme.email=contact@mon-domaine.com"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
- "8080:8080"
environment:
- "OVH_ENDPOINT=ovh-eu" # ou "ovh-ca"
- "OVH_APPLICATION_KEY=XXXXXXXXXXXXXXXX"
- "OVH_APPLICATION_SECRET=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
- "OVH_CONSUMER_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoami:
image: "containous/whoami"
container_name: "simple-service"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`mon-domaine.com`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls.certresolver=myresolver"

Faites docker-compose up -d, rendez-vous sur votre domaine et attendez quelques minutes… et TADA 🎉 !

Pour plus d’informations


Articles recommandés