https证书自动续期

序言

上一篇文章(https://www.cnblogs.com/cat-fish-h2/p/16088199.html)介绍了如何给禅道配置https访问,但是Let’s Encrypt提供的证书是有时间限制的,默认是60天,我们可以在证书的下载目录下通过<域名>.conf文件看到时间到期描述如下图,确实只有2个月的有效期,到期了需要手动重新申请证书,那有没有什么办法能自动续期证书呢,肯定是有的,这便是写作这篇文章的目的

DNS 证书自动续期

其实前面文章介绍的acme.sh就已经帮忙我们实现了这个功能,在安装acme.sh的安装过程进行了以下几步(acme.sh相关说明):

1、把 acme.sh 安装到你的 home 目录下:

~/.acme.sh/

并创建 一个 bash 的 alias, 方便你的使用: alias acme.sh=~/.acme.sh/acme.sh

2、定时任务

acme.sh会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.更高级的安装选项请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-install

安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/

可以通过 crontab -e 查看创建的定时任务

13 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

这个命令的意思是每天0点13分执行 acme.sh --cron --home "/root/.acme.sh" 命令检查证书是否过期,所有的输出都重定向到 /dev/null , 可以把 /dev/nulll看作"黑洞"。它等价于一个只写文件,并且所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到。

那么crontab为什么一定要加上/dev/null呢?因为如果crontab不重定向输出,并且crontab所执行的命令有输出内容的话,是一件非常危险的事情。因为该输出内容会以邮件的形式发送给用户,内容存储在邮件文件/var/spool/mail/$user如果命令执行比较频繁(如每分钟一次),或者命令输出内容较多,会使这个邮件文件不断追加内容,文件越来越大。而邮件文件一般存放在根分区,根分区一般相对较小,所以会造成根分区写满而无法登录服务器。

所以在添加crontab命令时,无论命令是否有输出,最好都加上输出重定向到文件或者/dev/null中。如*/5 * * * * /root/opdir/ntpupdate.sh &>/dev/null

参考:https://www.cnblogs.com/osroot/p/4299331.html

3、让我们执行下 "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh"看看会发生什么?

提示 pms.catwithfish.cn这个域名的证书有效期是在2022年5月28日,说明13 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null这个脚本确实会每天检测证书状态

4、那我们执行下 "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --force又会发什么?

--force表示强行更新证书,不管有没有到期,如上图报错,提示手动dns的方式是不支持自动续期的,那如何做到自动dns证书续期呢?请继续往下看

5、使用阿里云域名API自动颁发证书,阿里云acme.sh相关介绍 阿里云是第11个.

根据链接引导,生成对应Ali_Key和Ali_Secret即可,设置完Ali_Key和Ali_Secret还需要对刚才Ali_Key对应的用户授权阿里云域名的操作权限(授权[AliyunDNSFullAccess][AliyunDomainFullAccess]这两个,不然TXT解析会直接失败),具体操作请根据阿里云提示操作,这里不作介绍,这些都设置好后,我们执行./acme.sh --issue --dns dns_ali -d pms.catwithfish.cn --force

命令,看到如下图则表示自动颁发证书设置成功

我们再次执行"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --force命令也就可以成功了,如下图,表明自动续期已经能用了

6、安装证书

之前文章为了方便,演示的是把下载下来的证书直接copy到对应应用目录,cp -r /root/.acme.sh/pms.catwithfish.cn/* /opt/zbox/etc/ssl ,这不是一个正确的做法,正确的做法是安装证书,执行下面的命令

acme.sh --install-cert -d pms.catwithfish.cn \
--cert-file      /opt/zbox/etc/ssl/pms.catwithfish.cn.cer  \ #路径改成对应应用程序的路径
--key-file       /opt/zbox/etc/ssl/pms.catwithfish.cn.key  \
--fullchain-file /opt/zbox/etc/ssl/fullchain.cer \
--reloadcmd     "/opt/zbox/zbox restart" # 安装之后重启禅道

7、最后

至此,我们就能一直使用https保护禅道服务了,当然其他服务也是相同的做法,不用担心证书续期的问题,acme.sh已经帮我们做好了,觉得文章还不错,帮忙点个【推荐】 吧!

posted @ 2022-04-05 19:57  猫与鱼11  阅读(513)  评论(0编辑  收藏  举报