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_KeyAli_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

posted @ 2026-04-01 11:30  连夜说服高管  阅读(105)  评论(0)    收藏  举报