突然发现之前申请的证书就过期了,并没有自动更新。经过查询,发现Letsencrypt的certbot-auto使用dns-01方式进行manual验证,是无法自动renew的。怎么办呢? 几经周折,终于找到了一个比较好的办法。
距离之前一篇使用DNS配置letsencrypt证书的文章已经过去了3个月,当时还没有自动化插件,但就在6月份,有人写了letsencrypt使用dnspod进行dns验证的python插件,所以只需要你准备好域名的api的id和token,再稍许配置,就可以了。如果你不清楚你dnspod账号的api的id和token,请进这个页面申请API token。
配置过程如下。
首先需要写一下配置文件,内容如下:
1 2 |
certbot_dns_dnspod:dns_dnspod_email = "[填入一个邮箱地址]" certbot_dns_dnspod:dns_dnspod_api_token = "[api_id],[api_token]" |
第一行填入一个你的邮箱即可,没有特殊要求。第二行要注意,请填入你api的id,加上半角逗号,加上api的token。然后保存到某个路径下即可
接下来需要有一个技巧,先下载并运行certbot-auto。然后使用certbot-auto自己的pip,安装上certbot-dns-dnspod这个插件,然后运行certbot-auto,并指定使用certbot-dns-dnspod进行验证即可,整个过程非常顺利。
1 2 3 4 5 6 7 8 |
cd ~ wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto sudo ./certbot-auto -h sudo .local/share/letsencrypt/bin/pip install certbot-dns-dnspod sudo ./certbot-auto certonly -a certbot-dns-dnspod:dns-dnspod \ --certbot-dns-dnspod:dns-dnspod-credentials [配置文件地址] -d [要申请证书的域名] |
更新证书需要配置下crontab,每天凌晨3点会跑一遍程序看看需不需要更新证书,我使用的是nginx,所以就写成下面的样子:
1 |
0 3 * * * /path/to/certbot-auto renew --no-self-upgrade --post-hook "/usr/sbin/service nginx reload" |
有了这个工具,再也不用担心某些域名不方便访问80端口的问题了,直接使用dns验证就能自动更新证书了,而且后续是免维护的。