通过Cloudflare自动更新Let'sEncrypt的泛域名证书

起因

算是水文一篇吧。

我有个域名用了Let’s encrypt的泛域名证书,使用DNS TXT记录验证方式签发,问题在于这个流程有点麻烦,每次都需要手工去更新TXT记录才行。

虽然我知道Cloudflare有API可以进行这个操作,certbot也有插件可以直接使用,但是如之前说过,就是不想使用全局API KEY,想用域名API KEY,但这样就需要自己写一段脚本来操作。

然后就拖延症一直没写。

最近一次更新实在忍不住了……用了官方插件。

具体配置方法参考了这篇《Wildcard certificate from Let’s Encrypt with CloudFlare DNS

流程

登录Cloudflare的Dashboard,找到你的Profile,在API Tokens里找到Global API Key,View之取得这个Key。

创建一个文件:/root/.secrets/cloudflare.ini.secrets目录的模式设置为0700cloudflare.ini文件的模式设置为0400,文件内容为Cloudflare登录信息:

dns_cloudflare_email = "[email protected]"
dns_cloudflare_api_key = "your_global_api_key"

然后安装官方插件(因为apt仓库里的版本一般比较老,所以我都是用pypi里的):

sudo pip install certbot-dns-cloudflare

因为certbot我已经装过了,所以这里只装了cloudflare插件,如果你没装过,那还需要装certbot和certbot-nginx之类的。

最后,申请证书:

certbot certonly --email <[email protected]> -d <yourdomain> -d *.yourdomain --preferred-challenges dns-01 --agree-tos --key-type rsa \
                --dns-cloudflare --dns-cloudflare-credentials /root/.secrets/cloudflare.ini

其中–key-type rsa是因为我原来用的旧证书是RSA的,不想更新所以加上这个,certbot2.0以后默认使用ECDSA证书,如果你已经是ECDSA,那就不需要加这个了。

如果你的证书已经配置使用了,还需要在命令里加上–post-hook去运行命令重启nginx之类。

以后更新证书就简单了,直接:

certbot renew

即可,不再需要每次重新跑那么长的命令。

推送到[go4pro.org]