Cron自动续期命令失效导致网站SSL证书到期的解决方案

27 | 10 | 2017

前面写过一篇网站部署 Let’s Encript SSL Certificate 并启用 https 的教程:WordPress建站:SSL启用HTTPS全攻略

有网友反映,之前跟着教程做一切OK,但昨天发现网站 SSL 证书到期了(3个月前部署的SSL证书),打开网站的时候显示不安全,并且 https 上有个红色的失效划线,如下图所示:

之前跟大家介绍过 Let’s Encript 这个证书,优点是免费、部署快,但每次有效期只有90天,90天到期后证书需要续期。

检查看了一下,应该是当时没有正确执行证书自动续期的命令。首先,看看 cron 的状态:

提示:crond: unrecognized service

应该是当初没有安装 cron 服务,所以之前执行自动续期的 cron 命令并未生效。

处理办法:先手动把 SSL 证书续期,再安装 cron 服务,执行自动续期命令。


一、手动 SSL 证书续期

首先先手动续期一下,SSH 工具(如 Xshell )连接 VPS,并依次输入或复制粘贴以下命令回车执行:

停止 Nginx 服务(使用续期命令中的 –standalone 方法之前必须关闭 web 对 443 端口的占用,而 https 正用着 443,所以直接关闭 nginx )

执行完之后,等待执行。如果出现下面截图中的 Important Notes:Congratulations!  字样,表示证书已重新更新续期。

此时再重启 nginx:

经过这简单的 4 步复制,回车,替换域名 的操作,只需要 1 分钟,你的网站立即一切回归正常,https 变成绿色,小绿锁又回来了!

恭喜,你的网站证书又重新延期了 90天!


二、SSL证书利用cron服务自动续期

1)安装 cron 服务

依次输入以下 2 条命令并回车执行

成功安装 Cron 之后,启动 cron 服务。

2)启动 Cron 服务

执行后会出现:Starting crond:         [  OK  ]  的提示,表明启动成功。

继续执行开机启动服务命令,把 Cron 加入开机启动的服务列表中:

3)检查 Cron 服务状态

执行后会提示:crond (pid  xxxxx) is running…  代表正常运行中

4)执行 Cron 自动续期命令

把下面命令复制到记事本或文本编辑器中,然后把命令中的域名 example.com 替换成你的域名。替换完成后,复制。

以上代码含义是:每个月的1号夜里凌晨 1点10分开始关闭 web 服务,1点11分开始执行证书自动续期的命令,1点18分重新启动 web 服务。
第1个数字是minute,第二个数字是hour, 第三个数字是 date。其他的不用管。

复制完后,先别动(切勿粘贴执行)。输入以下命令:

输入此命令后,提示如下:

no crontab for root – using an empty one

此时相当于准备创建一个 root 用户的空白 crontab 文件,同时已经进入 vi 编辑状态。

在 vi 编辑状态下,请严格跟着操作步骤来!

按键盘 Ins[Insert] 键,进入 INSERT 模式,此时点击鼠标右键,粘贴上面从文本中复制的命令行(不支持 ctrl+v 快捷键粘贴)那3行命令,然后按 ESC 退出 INSERT 模式。

接着按组合键:shift + ;(冒号),会在当前窗口最下面一行出现一个冒号,此时输入 wq 然后回车,会保存文件并退出 vi 编辑模式。

退出 vi 编辑界面之后,此时会提示: crontab: installing new crontab

这时会生成 root cron文件。如果你想修改 root cron 文件,可以通过 /var/spool/cron 这个路径下载下来修改。

说明1)具体命令中的日期时间,你可以根据你的具体情况来修改。比如我的网站 3 月 30 日证书就要到期了,那么截图中我就设置 每个月 29号 16点 55分 开始执行命令。

如果你想设置成每个月5号的12点20分开始自动续期更新证书,
那么如下图,你可以设置分钟为20,时钟为12,日期为5。

这样在5号的12点20分,服务器会自动停止 web 访问服务,并在22分开始自动更新证书有效期,在30分重新启动 web 访问服务。

说明2)关于这一步 vi 直接编辑 crontab 文件的操作,如果你实在不会操作,被弄的晕头转向,那么也可以执行 crontab -e 命令进入 VI 界面后,直接按 shift+; 出现冒号后输入 wq,回车。即先生成一个空白的 root cron 文件。

然后再通过 Xftp(mac下可用transmit)通过 /var/spool/cron 这个路径找到 root 文件,用文本编辑器打开,粘贴那三行命令,保存上传覆盖原 root 文件。再执行下面的重启命令,也可以。

5)重启 Cron 服务使得命令立即执行

重启之后,一切搞定!

本文完!