1 line
5.6 KiB
JSON
1 line
5.6 KiB
JSON
{"uuid":"c5c1ae75-bf4e-4526-ab1e-a5583292aad9","slug":"ssl-let-s-encrypt-certbot","title":"certbot pour Let's Encrypt","author":"cedric@abonnel.fr","published":true,"published_at":"2023-02-10 22:48:33","created_at":"2023-02-10 22:48:33","updated_at":"2023-02-10 22:48:33","revisions":[],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Informatique","content":"# certbot pour Let's Encrypt\n\n\n\n**Certbot** est un binaire qui permet de mettre en œuvre un certificat SSL pour un domaine d'un site Internet.\n\nVoici les actions a effectuer sur **Linux** **Debian 10**.\n\nDepuis 2020, **certbot** est installé depuis **snapcraft**.\n\n## - Installer snap\nSi vous n'avez pas encore installé **snap**, il faut executer les commandes suivantes dans un **terminal**. Les commandes doivent avoir une élevation des droits.\n\n sudo apt update\n sudo apt install snapd\n sudo snap install core\n\nSi **snap** est déjà installé, assurez-vous d'être à jour :\n\n sudo snap refresh core\n \n\n## - Installer certbot\nExécutez la commande suivante oour installer **cerbot** sur votre machine. Ceci est a exéctuer dans un terminal.\n\n sudo snap install --classic certbot\n sudo ln -s /snap/bin/certbot /usr/bin/certbot\n\n## - Générer un certificat - gestion manuelle\nSi vous suivez ce guide, je vous conseille une gestion manuelle de vos certificats.\n\nIl y a deux variables :\n| dirWeb | Dossier des données du site. Pour habitude, c'est quelque chose du genre `/var/www/html/` | |\n| ---------------------------------------------------------------------------------------------------- |\n| siteName | Nom du site Internet. Par exemple `abonnel.fr` | |\n\n```BASH\nread -p \"Quel est votre nom de domaine ? \" siteName\nread -p \"Dossier Web du site ? \" dirWeb\nsudo certbot certonly --webroot -w $dirWeb -d $siteName --register-unsafely-without-email\n```\n\nL'avantage de ce script :\n- pas d'arrêt d'Apache 2\n- pas de mail à saisir\n- autonomie sur la configuration Apache 2\n\nQuelques **chemins** à retenir :\n\n| fichier de configuration | /etc/letsencrypt/renewal/$siteName.conf | |\n| ---------------------------------------------------------------------- |\n| dossier archive | /etc/letsencrypt/archive/$siteName | |\n| fichier cert | /etc/letsencrypt/live/$siteName/cert.pem | |\n| fichier privkey | /etc/letsencrypt/live/$siteName/privkey.pem | |\n| fichier chain | /etc/letsencrypt/live/$siteName/chain.pem | |\n| fichier fullchain | /etc/letsencrypt/live/$siteName/fullchain.pem | |\n\nPour enregistrer un domaine principal avec et sans les **www**, il faut utiliser le script suivant :\n```BASH\necho \"Quel nom de domaine (avec www) ?\"\nread siteNameWww\necho \"Quel nom de domaine (sans les www) ?\"\nread siteName\nsudo certbot certonly --webroot -w /var/www/html/ -d $siteName -d $siteNameWww --register-unsafely-without-email\n```\n\n## - Générer un certificat - gestion automatique\nSi vous avez effectué le paragraphe précédent , il est inutile de suivre les recommandations de ce chapitre.\n\nExé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.\n\n sudo certbot --apache\n \n \n\n## - Renouveler les certificats automatiquement\nÉditer la tâche des tâches Linux du compte `root`, *crontab* :\n```\nsudo crontab -e\n```\n\nLa 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`.\n\n```\n0 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\n```\n\nExplications :\n<html><pre>\nTous les deux mois ( 0 23 1-7 <strong>*/2</strong> 4 )\nà 23 heures ( <strong>0 23</strong> 1-7 */2 4 ),\nle premier jeudi ( 0 0 <strong>1-7</strong> */2 <strong>4</strong> ),\nlancement d'un script Python, qui retarde 1 heure au maximum (random.random() * 3600),\nl’exécution de la mise à jour de certbot.\n</pre></html>\n\nVous pouvez trouver d'autres informations sur la page <https://crontab.guru/#0_23_1-7_*/2_4>\n\n## - Afficher les dates du certificats\nPour afficher les dates de génération et d'expiration d'un certificat en local sur un serveur :\n\n```\nsudo ls /etc/letsencrypt/live/\nread -p \"Quel est votre nom de domaine ?\" siteName\nsudo openssl x509 -noout -dates -in /etc/letsencrypt/live/$siteName/fullchain.pem\n```\n\n---\n\nPour afficher les dates de génération et d'expiration d'un certificat d'un site distant :\n\n```\nopenssl s_client -connect www.w3.org:443| openssl x509 -noout -dates\n```\n\nExemple de résultat :\n\n\n## - Réinitialiser la configuration Let's Encrypt\nFaçon documentée :\n\n```BASH\necho Affichage des noms possibles :\nsudo ls /etc/letsencrypt/live\necho .\necho \"Quel nom de domaine ?\"\nread siteName\ncertbot delete --cert-name $siteName\n```\n\nFaçon brutale :\n\n```BASH\n#!/bin/bash\n# réinitialiser let's encrypt pour un domaine precis\necho Affichage des noms possibles :\nsudo ls /etc/letsencrypt/live\necho .\necho \"Quel nom de domaine ?\"\nread siteName\nsudo rm -fr /etc/letsencrypt/live/$siteName/\nsudo rm /etc/letsencrypt/renewal/$siteName.conf \nsudo rm -fr /etc/letsencrypt/archive/$siteName/\n```","featured":false,"tags":[]} |