基于acme的自动重新获取ssl证书脚本的修正脚本

acme 是一个很棒的 let’s encrypt 的客户端

但是,当本地的 nginx 设置了强制跳转 https 时,脚本会在验证域名的时候失败。为解决这样的问题,我写了一个新的脚本修正这个问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
list="example.com  another.example.com"
for i in $list;
do
mv "/etc/nginx/conf.d/"$i".conf" "/etc/nginx/conf.d/"$i".conf.bak";
cp "/etc/nginx/conf.d/"$i".conf.pre" "/etc/nginx/conf.d/"$i".conf";
done

service nginx reload

/root/.acme.sh/acme.sh --cron --home "/root/.acme.sh"

for i in $list;
do
rm -f "/etc/nginx/conf.d/"$i".conf";
mv "/etc/nginx/conf.d/"$i".conf.bak" "/etc/nginx/conf.d/"$i".conf";
done

service nginx reload

/etc/nginx/conf.d 是服务器配置文件夹,其中对于每一个需要申请 ssl 证书的域名的服务器配置,都需要事先准备一份备份配置,这个备份配置就是不强制跳转 https 的配置。在执行脚本申请证书时,会临时替换为正式的配置,从而避免申请失败。

最后,配置每隔三个月的定时任务即可:

1
0 0 1 4,7,10,1 * /path-to/this.sh > /dev/null # 表示每 4,7,10,1(隔三个月)月的 1号 00:00 执行当前脚本