Voici ma procédure pense-bête. L’idée est de migrer des virtualhosts Apache déja configuré vers LetsEncrypt avec un bon contrôle, à savoir:
– aucun changement automatique des fichiers de configuration des sites web
– un certificat par sous domaine
Installer le générateur de certificats SSL en suivant la doc sur https://certbot.eff.org/
Arrêter le serveur web:
# systemctl stop apache2
Lancer le générateur de certificats SSL:
# certbot certonly
Choisir l’option 3 : « Spinup a temporary webserver (standalone) »
Saisir le nom de domaine. Ex: « tuxicoman.jesuislibre.net »
Ca va créer un certificat dans /etc/letsencrypt/live/ . Le certificat est aussi copié dans /etc/letsencrypt/archive/ et une tache de renouvellement est ajoutée dans /etc/letsencrypt/renewal/ . Comme ça vous savez quoi effacer si vous faites de la merde.
Dans les fichiers de virtualhosts Apache qui sont destinés à recevoir du SSL , vous devez mettre au moins les lignes suivantes :
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/tuxicoman.jesuislibre.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tuxicoman.jesuislibre.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
Répéter l’opération pour tous les noms de domaine.
Pour lister les domaines du certificat:
# certbot certificates
On peut aussi ajouter des sous domaines au certificat.
# certbot certonly --cert-name domaine.net -d domaine.net -d sous1.domaine.net -d sous3.domaine.net
Redémarrer le serveur web:
# systemctl start apache2
Les certificats ont une durée de vie de 90 jours.
On va modifier la méthode de renouvellement pour utiliser Apache. Car sinon, la méthode « standalone » requiert que Apache soit éteint.
# grep -rl 'authenticator' /etc/letsencrypt/renewal/ | xargs sed -i "s/authenticator = standalone/authenticator = apache/g"
On peut ensuite vérifier que la procédure de renouvellement fonctionne:
# certbot renew --dry-run
Enlever « –dry-run » pour le faire réellement.
Mais en pratique vous n’aurez pas à vous en occuper. Vos certificats seront renouvelés automatiquement. Une tache journalière vérifie si vos certificats vont expirer et les renouvelle pour vous. Elle met son log dans /var/log/letsencrypt/letsencrypt.log
Par contre, je n’ai pas trouvé le code ou le crontab qui est responsable de cette tâche journalière. Ça m’intrigue… mais je suis sûr qu’un lecteur me donnera la solution ;)
Personnellement, j’ai rajouté un
/usr/local/bin/certbot-auto renew –noninteractive
quotidien dans la crontab du root : je ne pense pas que l’installation de CertBot intègre quelque chose d’automatique et planifié pour le renouvèlement…
Hello,
Merci pour l’article,
es-tu allé voir du côté de /etc/cron.d/certbot ?
Let’s Encrypt. Titre.
Pourquoi ne pas utiliser l’option –webroot qui évite de devoir couper ton serveur web ?
Titre corrigé. Merci
@HMA:
Sur https://certbot.eff.org/#debianjessie-apache c’est bien indiqué « The Certbot packages on your system come with a cron job that will renew your certificates automatically before they expire. » donc tu n’as pas à le faire toi même.
@ tintouli :
Bien vu, c’est bien dans /etc/cron.d/certbot que se trouve la tache automatique
Pour le cron, si on utilise systemd c’est un cron à la systemd qui est réalisé:
/etc/systemd/system/timers.target.wants/certbot
Si on utilise un autre system d’init c’est /etc/cron.d/certbot qui réalise la tache de cron:
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e ‘sleep int(rand(3600))’ && certbot -q renew
Ping Certbot - VKoehl
Ping Certbot – VKoehl