acme实现SSL签发
证书管理简化流程
下面是精简版的操作手册,覆盖:申请、重新签发、密钥配置、证书文件说明与安装。每一步都给出可复制的命令。
申请与签发
目标:使用 acme.sh + 阿里云 DNS 自动完成 dns-01 验证并签发证书。
# 1 导出阿里云凭证(当前 shell)
export Ali_Key="你的AccessKeyID"
export Ali_Secret="你的AccessKeySecret"
# 2 发起签发(使用 dns_ali)
/root/.acme.sh/acme.sh --home /root/.acme.sh --issue --dns dns_ali -d xxx.xxx.cn --debug 2
说明:命令会自动在阿里云创建 _acme-challenge TXT 并等待 CA 验证。若自动写入失败,可从日志获取 TXT 值并在阿里云控制台手动添加。
重新签发 与 手动续签
场景一 自动续期失败或想手动触发续签:
# 强制续签并触发已记录的 reloadcmd
/root/.acme.sh/acme.sh --renew -d xxx.xxx.cn --force
场景二 重新走完整签发流程(重新写 DNS):
export Ali_Key="你的AccessKeyID"
export Ali_Secret="你的AccessKeySecret"
/root/.acme.sh/acme.sh --issue --home /root/.acme.sh --dns dns_ali -d xxx.xxx.cn --debug 2
注意:手动续签前确认 _acme-challenge TXT 已生效(dig +short TXT _acme-challenge.xxx.xxx.cn @8.8.8.8)。
密钥配置
必须项:Ali_Key 与 Ali_Secret 在 cron 环境可用,否则自动续期无法修改 DNS。
# 持久化到 root 环境(示例)
echo 'export Ali_Key="你的AccessKeyID"' >> /root/.bashrc
echo 'export Ali_Secret="你的AccessKeySecret"' >> /root/.bashrc
source /root/.bashrc
确保 cron 存在 acme.sh 定时任务:
# 添加每日检查(若未存在)
( crontab -l 2>/dev/null | grep -v acme.sh ; echo "0 0 * * * /root/.acme.sh/acme.sh --cron --home /root/.acme.sh > /dev/null 2>&1" ) | crontab -
证书文件说明 与 安装
acme.sh 生成的常见文件及用途
- 私钥:
/root/.acme.sh/<domain>_ecc/<domain>.key—— 用作 nginx 的ssl_certificate_key。 - 单证书:
/root/.acme.sh/<domain>_ecc/<domain>.cer—— 仅服务器证书。 - 中间 CA:
/root/.acme.sh/<domain>_ecc/ca.cer—— 中间链。 - 完整链:
/root/.acme.sh/<domain>_ecc/fullchain.cer—— 推荐用于 nginx 的.crt,包含服务器证书 + 中间链。
常用验证命令
# 验证文件内容与到期时间
openssl x509 -in /root/docker/nginx/conf.d/ssl/xxx.xxx.cn.crt -noout -dates -subject
# 验证 nginx 实际返回的证书
openssl s_client -connect xxx.xxx.cn:443 -servername xxx.xxx.cn </dev/null 2>/dev/null | openssl x509 -noout -dates -subject
# 检查 TXT 是否生效
dig +short TXT _acme-challenge.xxx.xxx.cn @8.8.8.8
一句话建议
用 fullchain.cer 作为 nginx 的 .crt,把 Ali_Key/Ali_Secret 持久化到系统环境,并确保 acme.sh 的 cron 存在,这样续期会自动完成;需要手动续签时用 --renew -d <domain> --force。

浙公网安备 33010602011771号