SSL证书更新

获取certbot-auto -- ``` wget https://dl.eff.org/certbot-auto ``` 添加可执行权限 -- ``` cd certbot-auto所在文件,或在下面指令中直接使用绝对路径。 chmod a+x certbot-auto ``` 执行部署 -- ``` ./certbot-auto ``` 获取证书日期信息 -- ``` openssl x509 -in /etc/letsencrypt/live/sys.bangnikeji.net/fullchain.pem -noout -dates 输出如下 notBefore=Sep 15 05:53:55 2020 GMT 证书获取日期 notAfter=Dec 14 05:53:55 2020 GMT 证书过期日期 ``` 证书自动续期 -- **步骤:** 1.获取证书过期日期。 2.获取执行日期明天的日期。(若执行日期为9日,则获取10日的日期) 3.将过期日期与明天日期转化成毫秒数 4.判断两日期是否相等,或者过期日期大于执行日期的后一天的日期,条件匹配执行证书更新指令。不匹配输出日志。 5.将脚本加入到定时任务中,每天执行一次,重启定时任务。 **脚本代码如下** ``` #!/bin/bash AFTER_TIME=$(openssl x509 -in /etc/letsencrypt/live/sys.bangnikeji.net/fullchain.pem -noout -dates | grep 'After' | awk -F '=' '{print $2}') TOMORROW=$(date -d `date -d 'tomorrow' '+%Y%m%d'` '+%s%N') EXPIRATION_TIME=`date -d "$AFTER_TIME" '+%s%N'` NOW=`date '+%Y-%m-%d %H:%M:%S'` if [ $EXPIRATION_TIME -eq $TOMORROW ] || [ $EXPIRATION -ge $TOMORROW ] then echo ${NOW} " <<<<<< The SSL certificate is about to expire!!! >>>>>> " echo ${NOW} " <<<<<< Execute : cretbot-auto renew >>>>>> " $(cat /root/certbot-auto/certbot-auto renew --force-renewal) new_certificate_date=$(openssl x509 -in /etc/letsencrypt/live/sys.bangnikeji.net/fullchain.pem -noout -dates) echo ${NOW} $new_certificate_date echo ${NOW} " <<<<<< The SSL certificate has been updated!!! >>>>>> " else echo ${NOW} " <<<<<< The SSL certificate is not expiration!!! >>>>>> " fi ``` 文件存放路径:/etc/HTTPS_renew_certificate.sh **注** `grep 'After'` => 是根据‘After’关键词筛选。因为输出的日期信息包含获取时间和过期时间,我们这里只需要过期时间,所以使用`grep`指令,将过期日期筛选出来。 `awk -F '=' '{print $2}'` => awk是一种处理文本文件的语言。 `-F` 是根据指定分隔符进行分割,`{print $2}` 只获取第二个元素。 `--force-renewal` => 更新指令中添加此语句为强制更新。 定时任务代码 ``` 0 0 * * * root /etc/HTTPS_renew_certificate.sh >> /root/logs/CertificateRenew.log 2>&1 ``` **重启定时任务** ``` /bin/systemctl reload crond.service # 重载 /bin/systemctl restart crond.service # 重启 ```