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/null
l看作"黑洞"。它等价于一个只写文件,并且所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到。
那么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已经帮我们做好了,觉得文章还不错,帮忙点个【推荐】 吧!