环境
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
登录 阿里云控制台
创建一个 RAM 用户(如果还没有)
给这个用户分配权限:
AliyunDNSFullAccess
(管理域名解析)获取该用户的 AccessKey ID 和 AccessKey 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
打开文本修改即可
最后
如果要添加服务,需要重新编写安装证书的语句,如果要更灵活的体验,可以编写脚本,然后更新服务选择更新脚本,然后在脚本中添加服务