Qodes
Qodes
发布于 2025-08-17 / 4 阅读
0
0

免费获取域名证书并自动续签

环境

  • Ubuntu 22.04.5

  • 域名厂商:阿里云

目的:如题

原理:

  • Let’s Encrypt提供免费证书

  • 通过acme客户端+厂商api完成获取证书+自动化续签(生成通配符证书时 通过 DNS-01 验证)

操作

1. 安装 acme.sh

在你的服务器上执行:

curl https://get.acme.sh | sh

然后让环境变量生效:

export PATH="~/.acme.sh:$PATH"

2. 获取阿里云的 API Key

  1. 登录 阿里云控制台

  2. 创建一个 RAM 用户(如果还没有)

  3. 给这个用户分配权限:AliyunDNSFullAccess(管理域名解析)

  4. 获取该用户的 AccessKey IDAccessKey Secret


3. 配置阿里云 API 环境变量

在服务器上执行:

export Ali_Key="你的AccessKeyID"
export Ali_Secret="你的AccessKeySecret"

4. 申请通配符证书

由于默认是acme而客户端默认绑定ZeroSSL,用该服务需要注册邮箱,所以直接切成Let’s Encrypt

acme.sh --set-default-ca --server letsencrypt

假设你的域名是 example.com,执行:

acme.sh --issue --dns dns_ali -d example.com -d '*.example.com'

这会生成 example.com 和所有子域名的证书

这样自动续签的证书已经生成了,但是存放在.acme.sh文件夹,使用不方便(权限问题),所以我们需要移出来,并配置自动部署到服务中


5. 安装证书到服务器

创建一个专门存放证书的文件夹

sudo mkdir -p /etc/ssl/qodes.top

将证书安装过去,并设置重载服务,我这里是dockers的nginx重载,根据你的服务自定义,比如系统安装的nginx可以用 systemctl reload nginx

acme.sh --install-cert -d qodes.top \
--key-file /etc/ssl/qodes.top/qodes.top.key \
--fullchain-file /etc/ssl/qodes.top/fullchain.cer \
--reloadcmd "docker exec nginx nginx -s reload" \
--ecc

6. 查看并修改自动续签时间

acme.sh 默认会安装一个 cron 定时任务,每天检查一次证书并自动续签。
查看定时任务

 crontab -l

该定时任务会判断证书到期时间,只有当证书即将到期(通常是到期前 60 天左右)时,它才会真正尝试续签

目前是9点2分每天判断,我们可以手动改为凌晨3点(需要确认服务器的时区)

 sudo crontab -e

打开文本修改即可

最后

如果要添加服务,需要重新编写安装证书的语句,如果要更灵活的体验,可以编写脚本,然后更新服务选择更新脚本,然后在脚本中添加服务


评论