Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
kb:crypto:letsencrypt [2019/11/28 17:07] – [Génération du certificat] beu | kb:crypto:letsencrypt [2022/10/14 09:30] (Version actuelle) – [Signature du certificat] beu |
---|
| |
<code bash> | <code bash> |
# mkdir -p /etc/letsencrypt/wiki.virtit.fr/{live,archive} | # mkdir -p /etc/ssl/custom-certbot/{live,archive}/wiki.virtit.fr |
</code> | </code> |
| |
| |
<code bash> | <code bash> |
# openssl ecparam -name prime256v1 -genkey -out /etc/letsencrypt/wiki.virtit.fr/live/private.key | # openssl ecparam -name prime256v1 -genkey -out /etc/ssl/custom-certbot/live/wiki.virtit.fr/privkey.pem |
</code> | </code> |
| |
| |
<code bash> | <code bash> |
# openssl req -new -subj "/CN=wiki.virtit.fr" -key /etc/letsencrypt/wiki.virtit.fr/live/private.key -nodes -out /etc/letsencrypt/wiki.virtit.fr/live/cert.csr | # openssl req -new -subj "/CN=wiki.virtit.fr" -key /etc/ssl/custom-certbot/live/wiki.virtit.fr/privkey.pem -nodes -out /etc/ssl/custom-certbot/live/wiki.virtit.fr/csr.pem |
</code> | </code> |
| |
| |
<code bash> | <code bash> |
# certbot certonly --webroot -w /var/www/letsencrypt/ -d wiki.virtit.fr --csr /etc/letsencrypt/wiki.virtit.fr/live/cert.csr --cert-path /etc/letsencrypt/wiki.virtit.fr/live/cert.pem --chain-path /etc/letsencrypt/wiki.virtit.fr/live/chain.pem --fullchain-path /etc/letsencrypt/wiki.virtit.fr/live/fullchain.pem | # certbot certonly --webroot -w /var/www/letsencrypt/ -d wiki.virtit.fr --csr /etc/ssl/custom-certbot/live/wiki.virtit.fr/csr.pem --cert-path /etc/ssl/custom-certbot/live/wiki.virtit.fr/cert.pem --chain-path /etc/ssl/custom-certbot/live/wiki.virtit.fr/chain.pem --fullchain-path /etc/ssl/custom-certbot/live/wiki.virtit.fr/fullchain.pem |
</code> | </code> |
| |
====Renouvellement du certificat==== | ====Renouvellement du certificat==== |
| |
Pour renouveler le certificat, il faut déplacer le certificat, et les chaines de certificats.\\ | Pour renouveler le certificat, j'ai créé un script qui va vérifier la date d'expiration, et renouvelle au besoin.\\ |
Je vous conseil d'ajouter la tâche **cron** suivante : | Je vous conseil d'ajouter la tâche **cron** suivante : |
| |
<code bash> | <code bash> |
0 2 1 * * root /bin/mv /etc/letsencrypt/wiki.virtit.fr/live/*.pem /etc/letsencrypt/wiki.virtit.fr/archive/ && /usr/bin/certbot certonly --webroot -w /var/www/letsencrypt/ -d wiki.virtit.fr --csr /etc/letsencrypt/wiki.virtit.fr/live/cert.csr --cert-path /etc/letsencrypt/wiki.virtit.fr/live/cert.pem --chain-path /etc/letsencrypt/wiki.virtit.fr/live/chain.pem --fullchain-path /etc/letsencrypt/wiki.virtit.fr/live/fullchain.pem | 0 2 * * * root /opt/renew-cert.sh |
</code> | </code> |
| |
Il faudra adapter la dite commande avec le bon domaine. | et créer le script suivant : |
| |
La fonction post-hook ne fonctionne pas par cette méthode, rajoutez une tache cron quelques minutes plus tard pour reload le serveur Web | <code bash /opt/renew-cert.sh> |
| #!/usr/bin/env bash |
| |
| PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" |
| cd /etc/ssl/custom-certbot/live/ |
| TEMP=`mktemp -d` |
| NOW_SECONDS=`date '+%s'` |
| NEEDTORELOAD=0 |
| |
| for i in * ; do |
| END_DATE=`openssl x509 -dates -noout -in ${i}/cert.pem 2>/dev/null | sed -n 's/ *notAfter=*//p'` |
| END_DATE_SECONDS=`date '+%s' --date "$END_DATE"` |
| REMAINING_DAYS=`echo "($END_DATE_SECONDS-$NOW_SECONDS)/24/3600" | bc` |
| if [ "$REMAINING_DAYS" -lt "30" ]; then |
| NEEDTORELOAD=1 |
| echo "Renewing $i" |
| mkdir ${TEMP}/${i} |
| /usr/bin/certbot certonly --webroot -w /var/www/letsencrypt/ -d $i --csr ${i}/csr.pem --cert-path ${TEMP}/${i}/cert.pem --chain-path ${TEMP}/${i}/chain.pem --fullchain-path ${TEMP}/${i}/fullchain.pem |
| EXITCODE=$? |
| if [ "$EXITCODE" -eq "0" ]; then |
| if [ ! -d "/etc/ssl/custom-certbot/archive/${i}" ]; then |
| mkdir /etc/ssl/custom-certbot/archive/${i} |
| fi |
| mv ${i}/cert.pem /etc/ssl/custom-certbot/archive/${i}/cert.pem |
| mv ${i}/chain.pem /etc/ssl/custom-certbot/archive/${i}/chain.pem |
| mv ${i}/fullchain.pem /etc/ssl/custom-certbot/archive/${i}/fullchain.pem |
| mv ${TEMP}/${i}/* ${i}/ |
| fi |
| else |
| if [ -t 1 ] ; then |
| echo "Nothing to do on $i ($REMAINING_DAYS days left)" |
| fi |
| fi |
| |
| done |
| |
| if [ "$NEEDTORELOAD" -eq "1" ]; then |
| echo "Reloading services" |
| systemctl reload nginx |
| fi |
| rm -r $TEMP |
| </code> |
| |
| Il faudra le rendre exécutable, et ajouter les commandes nécessaires au rechargement des services dans le script. |