记一次域名证书自动续签
前要
我很早之前就使用了 acme.sh 脚本自动化更新域名
但我并不是先知道 acme.sh, 而是从某一个技术博主的推荐中使用的一个第三方提供免费域名签发的平台, 叫 freessl.cn
这个网站更新使用的是也是 acme.sh, 只不过证书的签发平台是它自己, 而不是我们熟知的 ZeroSSL, Let's Encrypt
问题
当前的免费证书签发有效期都是三个月, 我经常发现我配置在服务的 acme.sh 自动续签不起作用
home.wuhunyu.top 域名关联了我许多服务, 这个域名的证书过期, 引发了许多问题
- nginx 以改域名申请的证书的反向代理通通出错了
- 为又拍云 CDN 配置的回源证书过期导致博客的部分图片无法访问
解决
今天抽了点时间, 准备研究一下 acme.sh
目标
- 证书到期前自动续签
- 续签之后证书相关文件复制到指定的路径
- 续签并复制后, 重载 nginx 服务以重新加载新证书
方案
证书签发平台
我的服务器(国内)无法访问 ZeroSSL, 换成了 Let's Encrypt 之后是没问题的
续签机制
acme.sh 支持多种自动续签机制, 我是在阿里云购买的域名, 解析管理也在阿里云
可以通过 DNS 验证的方式来实现自动验证
操作步骤
实际的操作步骤主要分为两步
- 申请证书. 此操作只需要操作一次即可, 后续通过 cron 定时任务定期更新即可, 无需人工干预
- 复制证书并重载 nginx. 此操作也只需要手动操作一次, acme.sh 会记住这个动作, 并在续签之后自动执行
实操
安装 acme.sh
1 | 安装命令 |
阿里云 ak 申请 & 配置
针对阿里云的域名, 具体操作如下
- 修改
~/.acme.sh/account.conf, 添加以下环境变量
1 | export Ali_Key="<key>" |
阿里云 ak 申请地址, 需要给 AliyunDNSFullAccess 权限
- 申请证书时, 额外指定
--dns dns_ali即可
申请证书
我们以
baidu.com这个域名为例, 当然我没有管理baidu.com这个域名的权限, 下面只是举例而已
1 | 申请证书, 由于添加 TXT 记录到被感知需要时间, 所以有可能会失败几次, 慢慢等待它重试即可 |
复制证书 & 重载 nginx
假设我们需要将证书复制到
~/cert/baidu.com目录下
1 | ~/.acme.sh/acme.sh --install-cert -d baidu.com --ecc \ |
这样配置之后, 就可以全自动续签证书 & 重载 nginx 了




