通过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
目录的模式设置为0700
,cloudflare.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]