This commit is contained in:
jlecour 2021-10-26 11:08:06 +02:00
parent e1c7e129f9
commit aafe62d8ea

View file

@ -3,16 +3,16 @@ title: Howto acme.sh
categories: ssl
...
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 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 dexploitation et environnements dexécution.
* Documentation : https://wiki.acme.sh
* Documentation: https://wiki.acme.sh
## Installation
### Installation initiale
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.
Acme.sh dispose de son propre mécanisme dinstallation. Dans son fonctionnement par défaut il installe tout dans un dossier `~/.acme.sh` mais il est possible de linstaller de manière personnalisée.
Nous recommandons de linstaller de manière globale, pour lutiliser comme Certbot.
~~~
# git clone https://github.com/acmesh-official/acme.sh.git
@ -22,7 +22,7 @@ Nous recommandons de l'installer de manière globale, pour l'utiliser comme Cert
--config-home /etc/acme.sh
~~~
Il faut ensuite ajuster la configuration générale pour le shell dans `/etc/acme.sh/acme.sh.env` :
Il faut ensuite ajuster la configuration générale pour le shell dans `/etc/acme.sh/acme.sh.env`:
~~~{.bash}
export LE_WORKING_DIR="/usr/local/lib/acme.sh"
@ -31,20 +31,20 @@ export LE_CONFIG_HOME="/etc/acme.sh"
alias acme.sh="/usr/local/lib/acme.sh/acme.sh --config-home '/etc/acme.sh'"
~~~
Il faut enfin que votre environnement charge ce fichier de configuration :
Il faut enfin que votre environnement charge ce fichier de configuration:
~~~
# echo ". \"/etc/acme.sh/acme.sh.env\"" >> ~/.bashrc
# echo '. "/etc/acme.sh/acme.sh.env"' >> ~/.bashrc
~~~
### Challenge http-01
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.
le plus souvent on utilise un challenge `http-01` qui consiste à créer un fichier spécial dans le filesystem et indiquer son emplacement à lautorité de certification, pour quelle puisse vérifier quon a le contrôle du domaine.
Le challenge utilise des URL normalisées du type `/.well-known/acme-challenge/XYZ`.
Nous allons stocker ces fichier 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 :
Nous allons stocker ces fichiers de challenge dans `/var/www/html/.well-known/acme-challenge`. Il faut donc que ce dossier existe et quil soit accessible en lecture par le serveur web:
~~~
# mkdir -p /var/www/html/.well-known/acme-challenge
@ -53,7 +53,7 @@ Nous allons stocker ces fichier de challenge dans `/var/www/html/.well-known/ac
#### Apache
Pour Apache, on peut créer un fichier `/etc/apache2/conf-available/acme-challenge.conf` :
Pour Apache, on peut créer un fichier `/etc/apache2/conf-available/acme-challenge.conf`:
~~~{.apache}
Alias /.well-known/acme-challenge /var/www/html/.well-known/acme-challenge
@ -63,7 +63,7 @@ Alias /.well-known/acme-challenge /var/www/html/.well-known/acme-challenge
</Directory>
~~~
On active cette configuration :
On active cette configuration:
~~~
# a2enconf acme-challenge
@ -72,7 +72,7 @@ On active cette configuration :
#### Nginx
La configuration peut être placée dans `/etc/nginx/snippets/acme-challenge.conf` :
La configuration peut être placée dans `/etc/nginx/snippets/acme-challenge.conf`:
~~~{.nginx}
location ~ /.well-known/acme-challenge {
@ -83,7 +83,7 @@ location ~ /.well-known/acme-challenge {
}
~~~
Il faut ensuite inclure cette configuration dans le fichier de configuration des sites, par exemple :
Il faut ensuite inclure cette configuration dans le fichier de configuration des sites, par exemple:
~~~{.nginx}
server {
@ -96,7 +96,7 @@ server {
### Autorités de certification
Acme.sh supporte plusieurs autorités de certifications :
Acme.sh supporte plusieurs autorités de certifications:
* ZeroSSL.com CA (choix par défaut)
* Letsencrypt.org
@ -105,37 +105,37 @@ Acme.sh supporte plusieurs autorités de certifications :
* Pebble (strict Mode)
* autres CA compatibles RFC8555
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`
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`
## Génération d'un certificat
## Génération dun certificat
## Options générales
On peut spécifier le ou les domaines à inclure dans le certificat en utilisant une ou plusieurs options `--domain` (ou `-d`) :
On peut spécifier le ou les domaines à inclure dans le certificat en utilisant une ou plusieurs options `--domain` (ou `-d`):
~~~
# acme.sh --issue --domain www.example.com […]
# acme.sh --issue --domain www.example.com --domain example.com […]
~~~
On peut spécifier l'autorité de certification souhaitée (indépendamment de la configuration générale) :
On peut spécifier lautorité de certification souhaitée (indépendamment de la configuration générale):
~~~
# acme.sh --issue --domain www.example.com --server zerossl […]
~~~
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.
Pour des tests on peut utiliser les options `--staging` ou `--test`. Pour Let's Encrypt, ça permet dutiliser leur serveur de "staging" sur lequel les quotas sont bien plus élevés (et éviter de se faire bannir en cas derreurs répétées), en contre-partie dun certificat qui ne sera pas reconnu.
### Challenge http-01
Pour générer un certificat simple pour "www.example.com" avec un challenge `http-01` il faut indiquer le paramètre `--webroot` :
Pour générer un certificat simple pour "www.example.com" avec un challenge `http-01` il faut indiquer le paramètre `--webroot`:
~~~
# umask 022
# acme.sh --issue --domain www.example.com --webroot /var/www/html
~~~
> NB: la commande umask permet d'assurer que le fichier de challenge sera accessible à tout le monde en lecture (donc au serveur web).
> NB: la commande umask permet dassurer que le fichier de challenge sera accessible à tout le monde en lecture (donc au serveur web).
### Challenge dns-01
@ -143,11 +143,11 @@ _TODO_
## Déploiement
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).
Lors de la génération dun 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.
Il faut donc utiliser les fonctions de déploiements afin dinstaller les fichiers nécessaires.
## Renouvellement d'un certificat
## Renouvellement dun certificat
_TODO_
@ -157,14 +157,14 @@ Il est possible de configurer plusieurs systèmes de notification. Voir <https:/
Par exemple, pour recevoir un mail à chaque exécution de renouvellement.
On ajoute ces lignes dans la configuration `/etc/acme.sh/acme.sh.env` :
On ajoute ces lignes dans la configuration `/etc/acme.sh/acme.sh.env`:
~~~{.bash}
export MAIL_FROM="xxx@domain-from.com"
export MAIL_TO="yyy@domain-to.com"
~~~
Puis on joue la commande de configuration : `acme.sh --set-notify --notify-hook mail --notify-mode 0 --notify-level 1`
Puis on joue la commande de configuration: `acme.sh --set-notify --notify-hook mail --notify-mode 0 --notify-level 1`
## Autres commandes
@ -178,11 +178,11 @@ www.example.com "" no LetsEncrypt.org Wed 13 Oct 2021 07:37:
### Mise à jour
Il est possible de mettre à jour acme.sh ponctuellement : `acme.sh --upgrade`
Il est possible de mettre à jour acme.sh ponctuellement: `acme.sh --upgrade`
… ou automatiquement (déclenché par le cron de renouvellement) : `acme.sh --upgrade --auto-upgrade`
… ou automatiquement (déclenché par le cron de renouvellement): `acme.sh --upgrade --auto-upgrade`
On peut plus tard désactiver les mises à jour automatiques : `acme.sh --upgrade --auto-upgrade 0`
On peut plus tard désactiver les mises à jour automatiques: `acme.sh --upgrade --auto-upgrade 0`
### Désinstallation