informatique:serveur:web-linux-apache:ssl-let-s-encrypt-certbot

certbot pour Let's Encrypt

cerbot pour let's encrypt

Certbot est un binaire qui permet de mettre en œuvre un certificat SSL pour un domaine d'un site Internet.

Voici les actions a effectuer sur Linux Debian 10.

Depuis 2020, certbot est installé depuis snapcraft.

Si vous n'avez pas encore installé snap, il faut executer les commandes suivantes dans un terminal. Les commandes doivent avoir une élevation des droits.

sudo apt update
sudo apt install snapd
sudo snap install core

Si snap est déjà installé, assurez-vous d'être à jour :

sudo snap refresh core

Exécutez la commande suivante oour installer cerbot sur votre machine. Ceci est a exéctuer dans un terminal.

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Si vous suivez ce guide, je vous conseille une gestion manuelle de vos certificats.

Il y a deux variables :

dirWeb Dossier des données du site. Pour habitude, c'est quelque chose du genre /var/www/html/
siteName Nom du site Internet. Par exemple abonnel.fr
read -p "Quel est votre nom de domaine ? " siteName
read -p "Dossier Web du site ? " dirWeb
sudo certbot certonly --webroot -w $dirWeb -d $siteName --register-unsafely-without-email

L'avantage de ce script :

  • pas d'arrêt d'Apache 2
  • pas de mail à saisir
  • autonomie sur la configuration Apache 2

Quelques chemins à retenir :

fichier de configuration /etc/letsencrypt/renewal/$siteName.conf
dossier archive /etc/letsencrypt/archive/$siteName
fichier cert /etc/letsencrypt/live/$siteName/cert.pem
fichier privkey /etc/letsencrypt/live/$siteName/privkey.pem
fichier chain /etc/letsencrypt/live/$siteName/chain.pem
fichier fullchain /etc/letsencrypt/live/$siteName/fullchain.pem

Pour enregistrer un domaine principal avec et sans les www, il faut utiliser le script suivant :

echo "Quel nom de domaine (avec www) ?"
read siteNameWww
echo "Quel nom de domaine (sans les www) ?"
read siteName
sudo certbot certonly --webroot -w /var/www/html/ -d $siteName -d $siteNameWww --register-unsafely-without-email

Si vous avez effectué le paragraphe précédent generer-un-certificat-gestion-manuelle, il est inutile de suivre les recommandations de ce chapitre.

Exécutez le commande suivant pour générer un certificat et édité votre configuration Apache de manière automatique. Le protocole https s'active de manière automatique, en une seule étape.

sudo certbot --apache

Éditer la tâche des tâches Linux du compte root, crontab :

sudo crontab -e

La tâche doit exécutée le programme certbot avec l'option de renouvellement, renew. L'option post-hook permet d'indiquer la commande à exécuter après le traitement de certbot. Dans notre cas, on demande à systemctl de recharger la configuration Apache 2.

0 23 1-7 */2 4 python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/bin/certbot renew --post-hook "systemctl reload apache2" >> /var/log/letsencrypt/renew.log

Explications : <html><pre> Tous les deux mois ( 0 23 1-7 <strong>*/2</strong> 4 ) à 23 heures ( <strong>0 23</strong> 1-7 */2 4 ), le premier jeudi ( 0 0 <strong>1-7</strong> */2 <strong>4</strong> ), lancement d'un script Python, qui retarde 1 heure au maximum (random.random() * 3600), l’exécution de la mise à jour de certbot. </pre></html>

Vous pouvez trouver d'autres informations sur la page https://crontab.guru/#0_23_1-7_*/2_4

Pour afficher les dates de génération et d'expiration d'un certificat en local sur un serveur :

sudo ls /etc/letsencrypt/live/
read -p "Quel est votre nom de domaine ?" siteName
sudo openssl x509 -noout -dates -in /etc/letsencrypt/live/$siteName/fullchain.pem

Pour afficher les dates de génération et d'expiration d'un certificat d'un site distant :

openssl s_client -connect www.w3.org:443| openssl x509 -noout -dates

Exemple de résultat :

Exemple de résultat pour les dates du certificat de www.w3.org

Façon documentée :

echo Affichage des noms possibles :
sudo ls /etc/letsencrypt/live
echo .
echo "Quel nom de domaine ?"
read siteName
certbot delete --cert-name $siteName

Façon brutale :

letsencrypt_erase
#!/bin/bash
# réinitialiser let's encrypt pour un domaine precis
echo Affichage des noms possibles :
sudo ls /etc/letsencrypt/live
echo .
echo "Quel nom de domaine ?"
read siteName
sudo rm -fr /etc/letsencrypt/live/$siteName/
sudo rm /etc/letsencrypt/renewal/$siteName.conf 
sudo rm -fr /etc/letsencrypt/archive/$siteName/
  • informatique/serveur/web-linux-apache/ssl-let-s-encrypt-certbot.txt
  • Dernière modification : 2023/02/10 23:48
  • de Cédric ABONNEL