Ubuntu系统 用acme.sh自动签发由腾讯云托管域名的泛域名证书
1. 安装 acme.sh
# 1. 从 Gitee 克隆 acme.sh 源码
git clone https://gitee.com/neilpang/acme.sh.git
# 2. 进入目录并执行安装
cd acme.sh
./acme.sh --install -m 2497209071@qq.com
# 3. 回到用户目录并让命令生效
cd ~
source ~/.bashrc2. 设置默认 CA 并导出腾讯云 API 密钥
为了确保证书来自 Let’s Encrypt,并让 acme.sh 能调用腾讯云 API,需要进行以下设置。
# 将默认证书颁发机构设为 Let's Encrypt (acme.sh 默认可能是 ZeroSSL)[citation:4][citation:8]
acme.sh --set-default-ca --server letsencrypt
# 导出腾讯云的 API 密钥,用于 DNS 验证
export Tencent_SecretId="你的SecretId"
export Tencent_SecretKey="你的SecretKey"3. 重新签发证书 (DNS 验证)
使用 –issue 命令,配合 –dns dns_tencent 参数,为你的域名重新签发证书。请将 example.com 替换为你自己的域名。
# 同时为 example.com 和 *.example.com 申请证书,实现泛域名支持
acme.sh --issue --dns dns_tencent -d example.com -d '*.example.com'4. 安装证书到 Nginx 目录
这一步很重要,它会将新签发的证书和私钥复制到你指定的、Nginx 实际读取的目录,并设置续期后自动重载 Nginx 的命令。请务必使用 –install-cert 命令,而不是直接复制 ~/.acme.sh/ 下的文件,因为后者无法享受自动部署的便利。
先确保你的 Nginx 证书存放目录存在,例如 /etc/nginx/ssl。
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.pem \
--reloadcmd "systemctl reload nginx"5. 确认并重启 Nginx
虽然 Nginx 配置没变,但为了确保一切正常,可以手动重载一次,然后测试 acme.sh 的自动续期流程。
# 重载 Nginx
sudo systemctl reload nginx
# 手动模拟一次续期,验证所有配置是否正确 (不会真的续期)
acme.sh --renew -d example.com --force6. 查看当前定时任务
你可以用以下命令查看具体的 cron 配置:
crontab -l | grep acme通常你会看到类似这样的输出:
# 每天凌晨 0 点检测一次
0 0 * * * "/home/ubuntu/.acme.sh"/acme.sh --cron --home "/home/ubuntu/.acme.sh" > /dev/null配置默认当证书剩余有效期 < 30 天 时,才会执行续期,如果需要修改触发条件,如证书剩余有效期 < 5 天触发,则可以通过一下命令修改:
# crontab -e进入编辑模式
crontab -e
# 每天凌晨 3 点检测一次,< 5天触发续期
0 3 * * * "/home/ubuntu/.acme.sh"/acme.sh --cron --home "/home/ubuntu/.acme.sh" --days 5 > /dev/null
# 保存退出即可 

