Let’s Encrypt自动续期脚本

在之前的文章中有对Let’s Encrypt进行介绍,这个开源项目提供的Free SSL Cert非常适合在小型站点上进行部署。部署过程稍微复杂但是十分可靠。

美中不足的是,Let’s Encrypt提供的SSL证书有效期仅为90天,也就是说,为了确保证书不过期,使用者尽量得在60天内就对证书有效期进行更新操作。

所谓的更新,最简单的方法就是重新生成,但重新生成证书会有两个问题:

  1. 生成证书时会占用80端口,也就是说在生成证书期间,网站将无法访问。
  2. 手动升级证书过程虽然简单,但能够自动化的操作最好还是机器执行比较容易。

看了许多国内的关于自动续期脚本的文章,大多是拿来主义,直接使用别人封装好的脚本。诚然这十分方便,但其实自己编写一个自动续期脚本也并不困难。在DO上有篇文章详细的说明了这个过程(文章链接),可供参考。这里放出我自己的版本。

自动更新命令配置

这里使用Let’s Encrypt自带的Webroot插件完成证书更新。使用这个插件的好处在于,它在执行更新操作的时候创建了一个虚拟的环境用于更新证书,这就避免了80端口的占用。于是乎,不关闭网站完成证书更新便成为了可能。

首先,需要将Webroot插件的工作目录加入到Nginx的server字段中,使得Let’s Encrypt的服务能够访问到这个目录以用来validate。

在”在Nginx上部署Let‘s Encrypt证书“一文中,有Nginx服务器配置,这里需要在443端口的server字段中加入下面几行:

location ~ /.well-known {
    allow all;
}

以上修改的文件为

/etc/nginx/sites-enabled/zivers.com

在我的Nginx配置文件中,网站root目录为

/var/www/zivers.com/

执行更新操作时,需要选定这个目录运行脚本。

下面执行更新操作

cd /usr/letsencrypt
./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/var/www/zivers.com -d zivers.com -d www.zivers.com

请将上述命令中的路径和域名改为自己的。

重载Nginx生效

service nginx reload

上述命令似乎有点复杂,下面我们将上面的命令配置化。首先复制Let’s Encrypt的样例cli文件

cp /usr/letsencrypt/examples/cli.ini /etc/letsencrypt/auto-renew.ini
vi auto-renew.ini

去除以下字段前的注释并对配置文件进行修改:

rsa-key-size = 4096
email = admin@zivers.com
domains = zivers.com, www.zivers.com
webroot-path = /var/www/zivers.com/

现在,你可以用配置化的命令执行更新操作

cd /usr/letsencrypt
./letsencrypt-auto certonly -a webroot --renew-by-default --config /etc/letsencrypt/auto-renew.ini

创建自动更新脚本

于是我们可以创建一个脚本来自动执行上述操作

cd /usr/shell/
vi letencrypt-auto-renew.sh

样例脚本如下:

#!/bin/bash
cd /usr/letsencrypt
./letsencrypt-auto certonly -a webroot --renew-by-default --config /etc/letsencrypt/auto-renew.ini
service nginx reload

赋予执行权限

chmod +x letencrypt-auto-renew.sh

加入crontab自动执行

crontab -e
0 0 1 * * /usr/shell/letsencrypt-auto-renew.sh

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注