acme.sh est un client pour les autorités de certificats SSL/TLS qui utilisent le protocole ACME. Il est écrit entièrement en shell (compatible Bash, Dash et shell POSIX), donc compatible avec un très grand nombre de systèmes d’exploitation et environnements d’exécution.
Acme.sh dispose de son propre mécanisme d’installation. Dans son fonctionnement par défaut il installe tout dans un dossier `~/.acme.sh` mais il est possible de l’installer de manière personnalisée.
Nous recommandons de l’installer de manière globale, pour l’utiliser comme Certbot.
le plus souvent on utilise un challenge `http-01` qui consiste à créer un fichier spécial dans le filesystem et indiquer son emplacement à l’autorité de certification, pour qu’elle puisse vérifier qu’on a le contrôle du domaine.
Nous allons stocker ces fichiers de challenge dans `/var/www/html/.well-known/acme-challenge`. Il faut donc que ce dossier existe et qu’il soit accessible en lecture par le serveur web:
Il est possible de choisir son autorité à chaque certificat, ou bien globalement. Par exemple, pour avoir Let's Encrypt par défaut: `acme.sh --set-default-ca --server letsencrypt`
Pour des tests on peut utiliser les options `--staging` ou `--test`. Pour Let's Encrypt, ça permet d’utiliser leur serveur de "staging" sur lequel les quotas sont bien plus élevés (et éviter de se faire bannir en cas d’erreurs répétées), en contre-partie d’un certificat qui ne sera pas reconnu.
Lors de la génération d’un certificat, les fichiers de base sont stockés dans une structure interne (susceptible de changer sans préavis). Il faut donc utiliser les fonctions de déploiements afin d’installer les fichiers nécessaires.
Notez que la configuration des VHosts pour utiliser le certificat n'ets pas faite par acme.sh, il faut le faire soi-même.
### Scripts de déploiement
Acme.sh propose toute un catalogue de "hooks" qui peuvent être utilisés. Ils permettent d'exécuter des séquences d'actions beaucoup plus complexes. Voir <https://github.com/acmesh-official/acme.sh/wiki/deployhooks>.
Les hooks sont installés dans le dossier `/usr/local/lib/acme.sh/deploy`.
Il en existe un pour HAproxy qui se charge de concaténer les bons éléments et de les faire prendre en compte par HAProxy.
Il en existe aussi un pour copier les fichiers sur un ou plusieurs serveurs distants par SSH.
La configuration des hooks passe par des variables d'environnement.
Les commandes sont à exécuter une seule fois à la mise en œuvre d'un certificat. Acme.sh se souvient des actions et les exécute toutes à nouveau lors des renouvelements, grace à la persistence de la configuration dans `/etc/acme.sh/www.example.com/www.example.com.conf`.