| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| kb:crypto:letsencrypt [2018/05/19 14:43] – 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 -key /etc/letsencrypt/wiki.virtit.fr/live/private.key -nodes -days 3650 -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. |