diff --git a/HowtoLetsEncrypt.md b/HowtoLetsEncrypt.md index 2d10d8a8..69ff5a18 100644 --- a/HowtoLetsEncrypt.md +++ b/HowtoLetsEncrypt.md @@ -13,7 +13,7 @@ ce qui nécessite d'avoir temporairement un serveur HTTP sur le port TCP/80 de l Le certificat intermédiaire de Let's Encrypt est également signé par l'autorité de certification [IdenTrust](https://www.identrust.com/) préinstallée dans la plupart des navigateurs. -## Installation +# Installation On installe certbot et ses dépendances : @@ -24,13 +24,13 @@ $ certbot --version certbot 1.12.0 ~~~ -### -### Configuration du Serveur Web +## Configuration du Serveur Web Pour vérifier que la demande est légitime, Let's Encrypt doit accéder à un fichier temporaire via HTTP sur le port TCP/80 de l'adresse IP correspondant au _Common Name_ du certificat à signer, du type *http://www.example.com/.well-known/acme-challenge/hNgN_ygEFf-XiHJd6VErwNbfRcpP2CbJmIN3qpJXZOQ* -#### Apache + +### Apache Configuration : @@ -48,7 +48,8 @@ Alias /.well-known/acme-challenge /var/lib/letsencrypt/.well-known/acme-challeng ~~~ -#### Nginx + +### Nginx Préférez importer le snippet `/etc/nginx/snippets/letsencrypt.conf`, mais si une configuration manuelle est nécessaire: @@ -73,6 +74,8 @@ location ~ /.well-known/acme-challenge { ~~~ +# Utilisation + ## Génération du certificat ~~~ @@ -85,6 +88,7 @@ Pour faire les actions normalement sauf la génération du certificat et la modi En combinant `--test-cert` et `--dry-run` on peut donc faire un test de génération de certificat sans modification locale et sans risque de pénalisation en cas d'échex répétés. + ## Renouvellement du certificat Les certificats Let's Encrypt sont valables 90 jours. Un timer systemd roule automatiquement à chaque jour pour revalider le certificat. @@ -203,14 +207,14 @@ Pour exécuter un hook manuellement, par exemple après la création du certific $ VERBOSE=1 RENEWED_LINEAGE=/etc/letsencrypt/live/ /etc/letsencrypt/renewal-hooks/deploy/.sh ~~~ -# -## Lister les certificats +## Liste des certificats ~~~ # certbot certificates ~~~ + ## Suppression d'un certificat ~~~ @@ -223,17 +227,7 @@ $ VERBOSE=1 RENEWED_LINEAGE=/etc/letsencrypt/live/ /etc/letsencrypt/r Pour automatiser l'installation de _Certbot_ et la génération/renouvellement de certificats, nous utilisons des scripts : [Evoacme](https://forge.evolix.org/projects/ansible-roles/repository/revisions/stable/show/certbot). -## FAQ - -### Certificat Wildcard ou EV - -Let's Encrypt permet de générer un certificat Wildcard (via challenge DNS) mais pas EV (Extended Validation). - -### Je n'ai pas de port TCP/80 accessible - -Let's Encrypt vérifie la légitimité de la demande en faisant une requête DNS sur l'enregistrement DNS correspondant au _Common Name_ du certificat à signer (si il n'y a pas d'enregistrement DNS propagé mondialement, c'est donc impossible d'utiliser Let's Encrypt) et effectue une requête HTTP vers le port TCP/80 de l'adresse IP : il faut donc obligatoirement avoir temporairement un service HTTP sur le port TCP/80... au moins temporairement. - -### Challenge DNS +## Challenge DNS Si notre serveur web n'est pas accessible de l'extérieur, on peut utiliser un challenge par DNS plutôt que via une page HTTP. @@ -244,19 +238,10 @@ $ certbot -d domain.example.com --manual --preferred-challenges dns certonly Il suffira alors de créer l'entrée DNS que certbot affichera et continuer le processus interactif. -### Rate-limits +# Mises-à-jour -Doc officielle : -L'API de Let's Encrypt dispose un « rate limiting » afin d'éviter les abus. - -- 20 certificats pour 1 domaine maximum par semaine. 1 domaine est la partie juste avant le TLD. www.example.com, le domaine est example.com. blog.exemple.fr, le domaine est exemple.fr ; Si vous faites 1 certificat par sous-domaines, vous êtes donc limités à 20 par semaine. Il est donc préférable de regrouper plusieurs sous-domaines dans un seul certificat (SAN). La limite du SAN est de 100 sous-domaines. La limite est donc de 2000 certificats pour 1 domaine par semaine si vous mettez 100 sous-domaines par certificats. -- La limite de renouvellement d'un certificat est de 5 par semaine. Si votre procédure de renouvellement automatique échoue, au bout de 5 jours vous allez être banni pendant 1 semaine. -- La limite d'échec de validation du challenge est de 5 par heures (par adresse IP et utilisateur enregistré par email) ; - -Si vous échouez 5 fois à valider le challenge DNS, on peut penser qu'il suffit d'attendre 1h, sauf qu'en fait non. Le « bannissement » est pour 1 semaine ! - -### Mettre à jour certbot en debian 8, suite a l'arret du protocole ACMEv1 +## Mise-à-jour de certbot en Debian 8 (suite a l’arrêt du protocole ACMEv1) On désinstalle le paquet certbot : @@ -282,7 +267,63 @@ Il faut remplacer certbot par le script letsencrypt-auto comme ceci : # ln -s /usr/local/bin/letsencrypt-auto /usr/local/bin/certbot ~~~ -### Erreur de renouvellement liée à webroot_path + +## Mise-à-jour de certbot en Debian 9 + +Si `/usr/local/bin/certbot` est présent : + +~~~bash +mv /usr/local/bin/certbot /usr/local/bin/certbot.bak +hash -d certbot # renouvelle le cache des exécutables de bash +~~~ + +Dans `/etc/letsencrypt/cli.ini`, si la ligne `no-self-upgrade = 0`, commentez-la. + +Réinstallez ou mettez-à-jour la version de certbot présent dans les dépôts Debian : + +~~~bash +apt install certbot +~~~ + +A présent, testez votre installation avec la commande `certbot certificates`. + +En l'abence ou en cas d'oubli des modifications précédentes, on rencontre les erreurs : + +~~~ +Skipping bootstrap because certbot-auto is deprecated on this system. +Your system is not supported by certbot-auto anymore. +Certbot cannot be installed. +Please visit https://certbot.eff.org/ to check for other alternatives. +~~~ + + +# Troubleshooting + + +## Certificat Wildcard ou EV + +Let's Encrypt permet de générer un certificat Wildcard (via challenge DNS) mais pas EV (Extended Validation). + + +## Je n'ai pas de port TCP/80 accessible + +Let's Encrypt vérifie la légitimité de la demande en faisant une requête DNS sur l'enregistrement DNS correspondant au _Common Name_ du certificat à signer (si il n'y a pas d'enregistrement DNS propagé mondialement, c'est donc impossible d'utiliser Let's Encrypt) et effectue une requête HTTP vers le port TCP/80 de l'adresse IP : il faut donc obligatoirement avoir temporairement un service HTTP sur le port TCP/80... au moins temporairement. + + +## Rate-limits + +Doc officielle : + +L'API de Let's Encrypt dispose un « rate limiting » afin d'éviter les abus. + +- 20 certificats pour 1 domaine maximum par semaine. 1 domaine est la partie juste avant le TLD. www.example.com, le domaine est example.com. blog.exemple.fr, le domaine est exemple.fr ; Si vous faites 1 certificat par sous-domaines, vous êtes donc limités à 20 par semaine. Il est donc préférable de regrouper plusieurs sous-domaines dans un seul certificat (SAN). La limite du SAN est de 100 sous-domaines. La limite est donc de 2000 certificats pour 1 domaine par semaine si vous mettez 100 sous-domaines par certificats. +- La limite de renouvellement d'un certificat est de 5 par semaine. Si votre procédure de renouvellement automatique échoue, au bout de 5 jours vous allez être banni pendant 1 semaine. +- La limite d'échec de validation du challenge est de 5 par heures (par adresse IP et utilisateur enregistré par email) ; + +Si vous échouez 5 fois à valider le challenge DNS, on peut penser qu'il suffit d'attendre 1h, sauf qu'en fait non. Le « bannissement » est pour 1 semaine ! + + +## Erreur de renouvellement liée à webroot_path Il arrive que la configuration de renouvellement d'un certificat "déconne" et perde une partie de la configuration, entrainant une impossibilité de renouvellement. @@ -307,7 +348,7 @@ Voici le correctif : ~~~ -### Incident avec le certificat DST X3 du 30 septembre 2021 +## Incident avec le certificat DST X3 du 30 septembre 2021 Le 30 septembre 2021, le certificat DST X3 d'IdenTrust a expiré, provoquant de nombreux effets de bord. Plus d'explications sur @@ -341,3 +382,16 @@ Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5 Attention, au prochain renouvellement Let's Encrypt celui-ci va revenir ! Pour le bannir définitivement, il faut avoir un certbot récent et utiliser l'option `–preferred-chain`. + + +## Erreur : Unexpected value for no-self-upgrade + +Si vous rencontrez l'erreur suivante alors que vous n'avez pas fournit l'option `--no-self-upgrade` en argument : + +~~~ +certbot: error: Unexpected value for no-self-upgrade: '0'. Expecting 'true', 'false', 'yes', or 'no' +~~~ + +Dans `/etc/letsencrypt/cli.ini`, si elle est présente, commentez la ligne `no-self-upgrade = 0`. + +