Comment demander un certificat LetsEncrypt à l'aide d'Acme
LetsEncrypt a changé le monde des certificats SSL lorsque son offre de certificats SSL gratuits et de courte durée a permis à un grand nombre de particuliers et d'entreprises de sécuriser leurs applications Web sans frais. Avec ce service, l'infrastructure nécessaire devrait exister et, à cette fin, une pléthore d'applications ont vu le jour qui répondent aux besoins de délivrance de SSL.
L'un des utilitaires les plus courants est celui de CertBot
, qui peut bien fonctionner, mais une autre application open source disponible est acme.sh
. Il s'agit d'un client ACME entièrement basé sur le shell (le protocole utilisé par LetsEncrypt pour l'émission de certificats SSL). Avec de nombreuses fonctionnalités avancées intégrées, ce client permet des configurations complexes.
La façon la plus simple d'installer (acme.sh)(
est le suivant, qui télécharge et exécute le script à partir d'ici, https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh
.
curl | sh
La source de ce site se trouve ici, si vous souhaitez vérifier ce que fait le script réel
L'installation va télécharger et déplacer les fichiers vers ~/.acme.sh
et installez un alias dans votre ~/.bashrc
fichier. De plus, un travail cron sera installé s'il est disponible.
Sommaire
Premiers pas
Beaucoup de la façon dont vous utilisez (acme.sh)(
dépend de la méthode et de l'application pour lesquelles vous demandez le certificat. Acme.sh propose de nombreuses méthodes différentes pour demander un certificat, telles que:
Dans cet article, je vais montrer deux façons différentes de demander un certificat. J'inclus les configurations de serveur Web pour NGINX et Apache, qui utilise la méthode Webroot. La méthode du mode DNS utilise un fichier de configuration pour créer des enregistrements CNAME qui sont utilisés pour vérifier le domaine, au lieu de créer un fichier sur le système de fichiers.
Configuration du serveur Web
Configuration de NGINX LetsEncrypt
NGINX facilite la création d'une configuration partagée à utiliser lors de l'utilisation du webroot
méthode de demande d'un certificat.
letsencrypt.conf
Il est recommandé de créer une configuration autonome qui peut être incluse selon les besoins dans les configurations vhost, comme ceci: include /etc/nginx/letsencrypt.conf
# Rule for legitimate ACME Challenge requests (like /.well-known/acme-challenge/xxxxxxxxx)
# We use ^~ here, so that we don't check other regexes (for speed-up). We actually MUST cancel
# other regex checks, because in our other config files have regex rule that denies access to files with dotted names.
location ^~ /.well-known/acme-challenge/ {
# Set correct content type. According to this:
#
# Current specification requires "text/plain" or no content header at all.
# It seems that "text/plain" is a safe option.
default_type "text/plain";
}
# Direct access returns a 404
location = /.well-known/acme-challenge/ {
return 404;
}
Apache
Tout comme NGINX, Apache peut créer un fichier de configuration distinct. Un exemple de cette configuration est illustré ci-dessous.
/etc/apache2/conf-available/letsencrypt.conf
Dans ce cas, la configuration Apache est spécifique à l'hôte virtuel en raison de la nécessité d'inclure l'emplacement du disque. Ce qui suit est un emplacement commun, mais il peut être différent selon votre configuration spécifique.
Alias /.well-known/acme-challenge/ "/var/www/html/.well-known/acme-challenge/"
AllowOverride None
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
Configuration DNS
Dans cet article, je montre le mode DNS à l'aide de Cloudflare, car il offre des changements DNS extrêmement rapides et fonctionne exceptionnellement bien avec cette méthode.
Acme.sh utilise deux variables d'environnement pour le dns_cf
méthode: CF_Key
et CF_Email
. Pour l'inclure dans votre environnement au démarrage, vous pouvez inclure cette configuration dans votre .bashrc
fichier.
Cela peut ne pas être évident, mais il y a un espace précédent avant chaque commande d'exportation, ce qui garantit généralement qu'elles ne seront pas lues dans l'historique, au cas où.
export CF_Key="#########..."
export CF_Email="cfaccount@email.com"
Émettre un certificat via la méthode Webroot
Lors de l'exécution de la commande suivante, deux domaines sont définis dans un même certificat. Il s'agit de s'assurer que lorsque l'un des noms d'hôte est demandé (et souvent redirigé vers le nom canonique), la demande sera toujours protégée par une connexion sécurisée.
acme.sh --issue -d example.com -d www.example.com -w /var/www/html
Les certificats émis sont en /.acme.sh/acme.sh/{domain_name}
Émettre un certificat via la méthode DNS
Lorsque vous utilisez la méthode d'émission DNS, un txt
l'enregistrement est créé via l'API Cloudflare et LetsEncrypt vérifie le domaine à l'aide de cet enregistrement temporaire. Il s'agit d'une méthode plus propre, car aucun webroot
la configuration est nécessaire.
# Multiple Domains
acme.sh --issue --dns dns_cf -d example.com -d www.example.com
Les certificats émis sont en /.acme.sh/acme.sh/{domain_name}
Renouveler le certificat
Par défaut, Acme.sh créera un cronjob
comme l'entrée suivante:
48 0 * * * "/home/user/.acme.sh/acme.sh" --cron --home "/home/user/.acme.sh" > /dev/null
Pour forcer un renouvellement, vous pouvez exécuter la commande suivante, qui utilisera la même méthode d'émission que celle utilisée à l'origine:
acme.sh --renew -d example.com -d www.example.com
Suppression de certificats
Si vous ne souhaitez plus renouveler un certificat, il est très facile de le supprimer. Cependant, cela ne supprime pas le certificat du disque. Pour ce faire, vous devrez accéder à ~/.acme.sh/
et supprimez le répertoire contenant les certificats.
acme.sh --remove -d example.com -d www.example.com
Cela permet de nettoyer les certificats configurés pour le renouvellement, que vous pouvez vérifier en répertoriant les certificats comme suit:
acme.sh --list
Conclusion
LetsEncrypt offre un excellent service facile à utiliser pour approvisionner des certificats SSL à utiliser sur des sites Web. La création d'un site Web sécurisé est plus facile que jamais, et l'utilisation du client acme.sh signifie que vous avez un contrôle complet sur la façon dont cela se produit sur votre serveur Web.
Avec un certain nombre de méthodes différentes pour obtenir un certificat, même des méthodes très sécurisées, comme un domaine délégué, permettent de récupérer correctement les certificats nécessaires.