使用crontab 和 Certbot 对免费的 Let’s Encrypt 证书自动续期
Let’s Encrypt 颁发的证书的有效期只有90天,每次快过期的时候就需要手动更新 SSL 证书。
如果项目只有你一个人维护,刚好你休假了,休假前你也忘记手动更新证书了,那么就没法了,想想在外面玩,遇到这事还得找个网吧紧急处理的心情。😞😞😞
如果你有看过我写的 Linux定时任务crontab,我相信你已经想到了使用crontab来创建一个任务定时自动更新证书。
没错,这篇文章就是要讲这个。
什么是 Let’s Encrypt ?
SSL 证书一般均需要付费且价格不算便宜(一般最便宜的一档 SSL 一年的费用为 500 元左右),免费的证书较少且申请也较为麻烦。 Let’s Encrypt 是由 Mozilla 联盟思科推出的开源免费证书,旨在帮助全球网站取得 HTTPS 证书进而加密用户与网站之间的流量传输,目前已经得到了所有主流浏览器的支持。这套证书的安装也非常简单。
Let’s Encrypt 是 一个叫 ISRG ( Internet Security Research Group ,互联网安全研究小组)的组织推出的免费安全证书计划。参与这个计划的组织和公司可以说是互联网顶顶重要的先驱,除了前文提到的三个牛气哄哄的发起单位外,后来又有思科(全球网络设备制造商执牛耳者)、 Akamai 加入,甚至连 Linux 基金会也加入了合作,这些大牌组织的加入保证了这个项目的可信度和可持续性。
什么是 Certbot ?
尽管项目本身以及有该项目签发的证书很可信,但一开始 Let’s Encrypt 的安全证书配置起来比较麻烦,需要手动获取及部署。存在一定的门槛,没有一些技术底子可能比较难搞定。然后有一些网友就自己做了一些脚本来优化和简化部署过程。其中有一个网友 xdtianyu 做了一个可以快速获取及更新证书的 letsencrypt.sh 脚本被广泛使用。
首先要感谢 xdtianyu 同学的努力付出。我之前用的也是这个脚本,不知道是不是姿势不对,虽然顺利地按照流程装上了,但用 SSLlabs 检测我配的网站还是不太安全,在很多浏览器上都被标注为“不安全”。当时因为忙也没有太多时间折腾和细究。
后来看到 ISRG 的发起者 EFF (电子前哨基金会)为 Let’s Encrypt 项目发布了一个官方的客户端 Certbot ,利用它可以完全自动化的获取、部署和更新安全证书。这真是非常容易、方便呀,所以我们就可以直接使用官方客户端,不需要再使用第三方的工具了。虽然第三方工具也可以使用,但是官方工具更权威,风险也更小,而且遇到问题也更容易解决,毕竟有官方的支持。何况 Certbot 确实非常方便,也比所有的第三方工具都更方便,何乐而不用呢?
Certbot 如何安装及安装后如何获取 HTTPS 证书
还是那句话,直接看官方文档,网上很多第三方的文章其实都是炒来炒去,可能不对或已过时。
因此我不会在我的博客里面重复写这些。
官方文档 真的写的很详细了,选择你的使用的 web server 和操作系统就看打开对应的安装使用说明文档。
HTTPS证书自动续期步骤
1. 查看证书信息
1 | $ sudo certbot certificates |
通过证书信息,我们知道证书过期时间为2021-08-03 01:22:38
。
2. 使用强制更新证书命令
为什么要强制更新呢?
- 因为 crontab 是不能直接按天数定时执行任务的。
- 而且当证书还有效时,并不会更新证书。当证书离过期时间很接近时,执行更新才会真正更新SSL证书。
所以为了确保证书能真正被更新,故采用强制更证书的方式更为妥当。
当然如果你要想按天数定时执行,也是可以间接实现的。当然这不是本文的重点,感兴趣的话请参考 crontab中如何实现每隔多少天执行一次脚本。
certbot 强制更新证书只用加上 --force-renewal
参数, 执行命令 certbot renew --force-renewal
即可。如果是想更新指定的证书使用参数--cert-name
。如:
1 | sudo certbot renew --cert-name api.xxx.com --force-renewal |
3. 编写更新证书脚本
对于要执行的命令比较长时,写成脚本更加方便。
1 | sudo vim certbot-renew.sh |
脚本内容如下:
1 |
|
4. 创建crontab任务
- 进入编辑crontab任务列表
1
sudo crontab -e
- 添加定时执行更新证书脚本的任务
1 | 0 3 1 * * /ktt/crons/certbot-renew.sh &>> /ktt/crons/certbot-renew.log |
0 3 1 * *
指每个月1号3点0分执行任务&>>
&
指将标准输出和标准错误输出都重定向到certbot-renew.log文件;>
指覆盖写入到文件;>>
指追加写入到文件。
bash手册:
1
2
3
4
5
6
7
8
9 standard error:
&>word and
>&word
Of the two forms, the first is preferred. This is semantically
equiva- lent to
>word 2>&1
- 保存。
使用crontab 和 Certbot 对免费的 Let’s Encrypt 证书自动续期