介绍

前一段时间 Let’s Encrypt 发信说证书快要过期了,估计是原有的 certbot 不兼容了,需要升级到新版本。之前部署 HTTPS 证书的文章:

环境

  • CentOS 7.6.1810
  • Nginx 1.16.0

文档

官网已经给出了详细的教程,只要选择当前使用的操作系统与 HTTP 服务器:

连接到服务器

SSH 连接到服务器并获得 sudo 权限,可以简单地执行 su 切换到 root 用户。

安装 snapd

严格按照文档指示执行命令即可。

1
2
3
4
$ sudo yum install epel-release
$ sudo yum install snapd
$ sudo systemctl enable --now snapd.socket
$ sudo ln -s /var/lib/snapd/snap /snap

这里一定要安装 classic 版本,否则后面安装 certbot 时会报错:

1
2
3
$ sudo snap install --classic certbot
error: cannot install "certbot": classic confinement requires snaps under /snap or symlink from
       /snap to /var/lib/snapd/snap

更新 snapd

虽然文档中将更新的两条命令放在一起执行,但是会报错。

1
2
3
$ sudo snap install core; sudo snap refresh core
error: too early for operation, device not yet seeded or device model not acknowledged
error: too early for operation, device not yet seeded or device model not acknowledged

分开执行就不会有问题:

1
2
3
$ sudo snap install core
$ sudo snap refresh core
snap "core" has no updates available

安装 Certbot

移除已安装的 certbot,安装新版本 certbot,建立方便使用 certbot 的符号链接

1
2
3
4
$ sudo yum remove certbot
$ sudo snap install --classic certbot
certbot 1.21.0 from Certbot Project (certbot-eff✓) installed
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

更新证书

执行更新命令,按照提示选择要更新的域名:

1
$ sudo certbot --nginx

访问下网站确认证书已生效。

设置自动更新证书

更新证书测试,确定没有任何异常:

1
$ sudo certbot renew --dry-run

了解 certbot renew 的参数,修改更新证书命令:

1
$ certbot --help renew

需要编辑原有的 crontab 定时任务,将其更新为新版本:

1
2
$ sudo crontab -e
0 */12 * * * test -x /usr/bin/certbot && perl -e 'sleep int(rand(3600))' && certbot renew --post-hook "/usr/sbin/nginx -s reload" >> /root/certbot.log