ZeroSSL自动续期泛域名证书
常见技术问题 刘宇帅 1天前 阅读量: 6
ZeroSSL 是一个免费的数字证书颁发机构(CA),支持 ACME 协议,可以配合 acme.sh 完成证书的申请、安装和自动续期。
本文将教你如何配置 acme.sh 实现 ZeroSSL 的 泛域名证书自动续期,并包含常用 DNS 服务商的 API 配置方法。
一、准备工作
1. 安装 acme.sh
curl https://get.acme.sh | sh
source ~/.bashrc # 或 source ~/.zshrc
2. 设置 ZeroSSL 为默认 CA
acme.sh --set-default-ca --server zerossl
3. 注册 ZeroSSL 账户
acme.sh --register-account -m you@example.com --server zerossl
二、通过 DNS 验证申请泛域名证书
以 example.com
为例,所需要的域名包括:
example.com
*.example.com
使用 DNS API 进行校验。
acme.sh --issue --dns dns_xxx -d example.com -d '*.example.com'
三、常用 DNS 服务商的 API 配置
按照您的 DNS 服务商,需要配置相应的 API 环境变量。
【Aliyun (AliDNS)】
export Ali_Key="<AccessKeyId>"
export Ali_Secret="<AccessKeySecret>"
- 权限需要设置 RAM 用户并授予
AliyunDNSFullAccess
【DNSPod】
export DP_Id="<API ID>"
export DP_Key="<API Key>"
- 登录 dnspod.cn 获取 API Token
【Cloudflare】
export CF_Token="<APIToken>"
export CF_Account_ID="<AccountID>"
- 在 Cloudflare 设置一个限权限 API Token(含 Zone:DNS Edit 权限)
【GoDaddy】
export GD_Key="<API Key>"
export GD_Secret="<API Secret>"
【Name.com】
export Namecom_Username="<username>"
export Namecom_Token="<API token>"
- API Token 在 https://www.name.com/account 获取
四、安装证书 + Nginx 重载
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.pem \
--reloadcmd "nginx -s reload"
默认情况下 acme.sh 会建立 crontab 任务实现自动续期。
五、自动续期机制详解
acme.sh 在安装时默认会设置一个 cron
任务,每天运行一次,检查是否有即将过期的证书(通常提前 30 天自动续期)。
检查是否已配置自动续期:
crontab -l
如果没有,可以手动添加定时任务:
0 0 * * * ~/.acme.sh/acme.sh --cron --home ~/.acme.sh > /dev/null
此外,只要你使用 --install-cert
安装过证书,它会在续期后自动执行 --reloadcmd
里的指令,比如 nginx reload。
你也可以手动触发续期:
acme.sh --renew -d example.com --force
六、查看状态
显示所有证书:
acme.sh --list
查看指定域名证书状态:
acme.sh --info -d example.com
结论
通过 acme.sh 配合 ZeroSSL 和 DNS API,我们可以完全自动地管理泛域名 SSL 证书的申请、安装和续期,极大地简化了 HTTPS 部署的细节。
如果需要支持多域名/自动分发部署,还可考虑搭配 Docker、K8s、CI/CD 脚本实现全链路完全自动化。