Auto renewal Let's Encrypt SSL certificate
- Category: 電腦相關
- Last Updated: Wednesday, 06 April 2016 16:28
- Published: Monday, 28 March 2016 15:17
- Written by sam
I use Let's Encrypt SSL certificate for my website boredom.gotdns.com
Try to use script to auto renew when days < 30 days
Below is the sample.
#!/bin/bash #Check expiration and renew Let's Encrypt SSL certificate #No any check, like file -f or ls -l function, so please notice. #Sam DAYS=60 SSLNAME="cert.pem" SSLLOCATION="/etc/letsencrypt/live/boredom.gotdns.com" SSLFILE="${SSLLOCATION}/${SSLNAME}" LETSENCRYPTLOCATION="/root/.local/share/letsencrypt/bin/" LETSENCRYPTEXE="letsencrypt" LETEXE="${LETSENCRYPTLOCATION}/${LETSENCRYPTEXE}" SUBJECT="Boredom SSL renew" EMAIL="samATmyla.gotdns.com" CONTENT="/tmp/content" if [ -e "$CONTENT" ]; then rm -f "/tmp/content" fi get_days_left() { f1=$(date -d "`openssl x509 -in ${SSLFILE} -text -noout |grep "Not After" |cut -c 25-`" +%s) f2=$(date -d "now" +%s) EXP=$(echo \( $f1 - $f2 \) / 86400 |bc) } get_days_left BEFORE_DAY=$EXP if [ "$EXP" -gt "$DAYS" ]; then echo "Not time to renew" echo "Left Days: $EXP" else echo "Need And Exe" > $CONTENT $LETEXE --renew certonly --webroot -w /www/boredom.gotdns.com -d boredom.gotdns.com get_days_left if [ "$EXP" -le "$BEFORE_DAY" ]; then echo "Error Renewal" >> $CONTENT else service nginx restart echo "Left Days After Renew:" $EXP >> $CONTENT lsof -i :443 >> $CONTENT service nginx status |grep Active: >> $CONTENT fi fi if [ -e "$CONTENT" ]; then mail -s "$SUBJECT" -aFROM:"$EMAIL" "$EMAIL" < $CONTENT fi
Then add shell to your crontab.