Skip to main content

Des certificats SSL en moins de 5 minutes avec acme.sh et CF

Cet article doit être mis à jour, notamment parce que :
- il n'est pas (plus) nécessaire d'utiliser la clé d'API globale de Cloudflare,
- il est préférable de lancer acme.sh sans spécifier option supplémentaire pour la clé (acme.sh génère désormais une clé plus robuste par défaut)

Le but de la manœuvre est d'obtenir un ou des certificats pour des domaines gérés par Cloudflare au niveau DNS (aucun besoin que ces domaines utilisent le proxy de Cloudflare, c'est vraiment l'API DNS qui va nous intéresser pour obtenir nos certificats).

Ce tutoriel suppose que vous avez déjà configuré au moins un domaine, celui pour lequel vous souhaitez un certificat, sur Cloudflare.

Récupération de la clé d'API Cloudflare

Elle se trouve sur dash.cloudflare.com, en haut à droite dans "my profile" puis "API Tokens". Copier la valeur de la clé "Global API Key".

Traitez cette clé comme un mot de passe, tant elle donne accès à l'intégralité de votre compte Cloudflare !

Let's go : installer acme.sh sur le serveur

Cela peut se faire en tant qu'utilisateur normal, pas besoin d'être root.

curl https://get.acme.sh | sh -s email=<votre mail>

Rajouter la clé API de Cloudflare à ~/.acme.sh/account.conf

SAVED_CF_Key='<votre clé Cloudflare>'
SAVED_CF_Email='<votre mail>'

Générer le certificat 🎉

~/.acme.sh/acme.sh --dns dns_cf --issue --keylength 4096 -d <domaine>

avec autant d'arguments -d que nécessaire, par exemple pour une wildcard :

~/.acme.sh/acme.sh --dns dns_cf --issue --keylength 4096 -d <domaine> -d *.<domaine>

acme.sh utilise ZeroSSL par défaut, parfois ça ne marche pas. Dans ce cas vous pouvez spécifier le flag --server letsencrypt :

~/.acme.sh/acme.sh --server letsencrypt --dns dns_cf --issue --keylength 4096 -d <domaine> -d *.<domaine>