LINUX:LetsEncrypt
But
Si votre serveur est accessible depuis Internet et que vous proposez un service WEB par exemple, il vous faut acquérir un certificat publique auprès d'une Autorité de Certification (CA) officielle. Let's Encrypt en propose des gratuits.
Installation
Sous Linux (Fedora), on installe le logiciel avec la commande suivante:
dnf install certbot python3-certbot-apache
Ici on va utiliser Apache comme serveur WEB (service HTTPD).
Prérequis
Un certain nombre de prérequis sont nécessaires:
- un nom de domaine officiel
- votre serveur doit être accessible depuis Internet
- Apache doit être installé et doit s'exécuter
- Apache doit présenter au moins un "VirtualHost" lié au nom de domaine officiel, celui-ci doit être configuré au niveau du DNS mondial. Voyez l'article suivant: Serveur visible sur Internet
Il est fortement conseillé de sauver votre configuration d'Apache se trouvant dans le répertoire "/etc/httpd" car elle sera adaptée automatiquement. Par défaut, votre configuration se trouve dans les répertoires "/etc/httpd/conf" et "/etc/httpd/conf.d".
Acquérir un certificat
On exécute la commande suivante:
certbot --apache
La première fois, on vous demande une adresse mail. Ce ne peut être une adresse mail interne. Let's Encrypt doit pouvoir vous envoyer un message par exemple en cas de dépassement du délais de validité.
Il présente une liste de vos "VirtualHost". Il suffit d'introduire le n° d'ordre de celui désiré.
Les certificats vont se stocker dans le répertoire "/etc/letsencrypt".
Par la même occasion, il va adapter votre configuration. Elle fait référence à un fichier de configuration que la commande a généré "/etc/letsencrypt/options-ssl-apache.conf". Il n'est pas nécessaire de le modifier ou de l'outrepasser. Par contre, vérifiez votre propre configuration et adaptez-la si nécessaire. C'est pour cette raison qu'on vous conseille de la sauver auparavant.
Vérification de l'état d'un certificat
Il existe un site WEB où l'on peut visualiser l'état et le contenu d'un certificat publique. Il faut aller à l'URL https://crt.sh/.
Sur cette page, vous introduisez votre nom de domaine ou de machine. Vous pouvez également y récupérer le certificat dans le cas, par exemple, où vous l'auriez effacé par erreur.
Révocation d'un certificat
Dans le cas d'un certificat compromis ou n'ayant plus de raison d'être, on passe par une étape de révocation. Cette révocation sera enregistrée directement sur le site de Let's Encrypt. Cet état est consultable sur le site "crt.sh" vu ci-dessus.
On exécute la commande de la forme suivante:
certbot revoke --cert-path /etc/letsencrypt/archive/votre.domaine/cert1.pem --key-path /etc/letsencrypt/archive/votre.domaine/privkey1.pem
Vous remplacez évidemment "votre.domaine" par le vôtre selon le nom du répertoire correspondant.
Détruire un certificat
Il se peut que vous n'ayez plus besoin d'un certificat après révocation. Pour l'éliminer, lancez la commande suivante:
certbot delete
Il vous est demandé d'introduire le n° d'ordre du certificat concerné selon la liste présentée.
Renouvellement des certificats via le CRON
La durée de validité est courte. Elle est de trois mois. Il faut donc veiller à les renouveler.
Heureusement, il existe une commande qui s'en charge:
certbot renew --apache
Les certificats seront renouvelés seulement s'il reste moins de 30 jours de validité.
On peut créer un script. On le place par exemple dans un répertoire "/manager/letsencrypt" et on le nomme par exemple "ssl.renew.bat". Par la même occasion, on relance Apache au cas où les certificats auraient été renouvelés.
Voici ce script:
#!/bin/bash /usr/bin/certbot renew --apache /usr/bin/systemctl restart httpd
On fait appel à ce script dans le Cron de Linux. On ajoute les lignes suivantes dans le fichier "/etc/crontab":
# letsencrypt renew 40 23 * * * root /manager/letsencrypt/ssl.renew.bat > /manager/letsencrypt/ssl.renew.log
Ici on l'appelle tous les jours pendant la nuit. Mais on pourrait ne l'appeler qu'une fois par semaine.
Renouvellement des certificats via le SYSTEMD
La durée de validité est courte. Elle est de trois mois. Il faut donc veiller à les renouveler.
Il existe un service via SYSTEMD qui fait cela à la place de passer par ce CRON.
Il est préférable de modifier le fichier "/etc/sysconfig/certbot". Modifiez les lignes:
POST_HOOK="--post-hook 'systemctl restart httpd'" #POST_HOOK=""
afin de redémarrer le service "HTTPD" en cas de renouvellement des certificats.
Ensuite il faut activer et lancer le service de type "timer".
La première commande active le service pour qu'à chaque démarrage du serveur, le service se lance. La seconde lance directement le service. La troisième relance le service.
systemctl enable certbot-renew.timer systemctl start certbot-renew.timer systemctl restart certbot-renew.timer
La commande suivante permet de visualiser son journal:
journalctl -u certbot-renew.service
ou
systemctl status certbot-renew.service
Remarque
Ces certificats sont utilisables dans d'autres contextes comme par un serveur de messagerie (postfix, dovecot).