Certbot申请和续签Let's Encrypt证书一键脚本
申请Let’s Encrypt证书一般采用 DNS
认证的方式,通常命令如下:
1 | certbot certonly -d metazion.com -d *.metazion.com -m applicant.gmail.com --manual --preferred-challenges dns |
这样交互的方式,过程中需要去域名解析服务商(如 DNSPOD)处添加 TXT
记录以供验证。每三个月需要续签一次证书,每次都要手动添加,还是很繁琐的。
各大域名解析服务商都有提供 OpenAPI
,可以通过API来自动化完成上述操作。网上已经有一些相关代码,但本着自己定制的需求,实现了一份。
目录结构如下:
1 | . |
configure.sh
配置脚本。用户运行这个脚本,根据提示输入申请域名等信息,会生成 申请脚本
certbot_apply.sh
和 续签脚本certbot_renew.sh
,顾名思义,分别用来申请和续签证书。hook_dns.sh
DNS操作回调脚本。申请或续签时,通过回调该脚本实现添加或删除DNS验证记录。用户一般无需修改该脚本。
hook_deploy.sh
证书部署回调脚本。续签证书成功后,可以通过该脚本部署新的证书,并重启Web服务器等。需要用户自行在该脚本实现相关功能。
hall.py
DNS功能实现脚本。
hook_dns.sh
实际调用该脚本,该脚本根据用户输入调用provider
下的实际域名解析服务商的驱动程序完成相关功能。provider
域名解析服务商驱动程序目录。默认包含腾讯云(DNSPOD)的驱动程序
txy.py
。用户如需自定义使用其他服务商,只需要提供与configure.sh
时输入的域名解析服务商同名的Python
驱动程序脚本,放在该目录下即可,驱动程序必要接口可以参考txy.py
。test
测试脚本目录。简单测试驱动程序功能。
下面展示下实际使用的输入输出:
1 | [root@gemini certbot]# ./configure.sh |
可以调用 certbot_apply.sh
申请证书。
可以调用 certbot_renew.sh.sh
续签证书。
配合 crontab
计划任务可以实现定期续签,这样就完全自动化无人操作了。
代码在Github。