使用acme.sh获取泛二级域名证书+pve ssl证书自动续签

2024-11-15
1分钟阅读时长

1. 安装 acme.sh

curl https://get.acme.sh | sh -s email=你的邮箱地址

安装完成后,激活环境(必须执行):

source ~/.bashrc

验证安装是否成功:

acme.sh --version

2. 配置 Cloudflare API 凭证

你需要提前在 Cloudflare 后台获取:

  • CF_Token (API令牌)
  • CF_Zone_ID (域名区域ID)
  • CF_Account_ID (账户ID)
  • CF_EMAIL (Cloudflare登录邮箱)

永久配置环境变量(推荐,一劳永逸)

# 编辑配置文件
vi /etc/profile.d/acme-cloudflare.sh

写入以下内容(替换成你自己的信息):

export CF_Token="你的CF令牌"
export CF_Zone_ID="你的域名区域ID"
export CF_Account_ID="你的账户ID"
export CF_EMAIL="你的Cloudflare邮箱"

激活配置:

source /etc/profile.d/acme-cloudflare.sh

3. 第一次申请证书(全自动)

直接执行命令,无需手动操作DNS,脚本自动添加/删除TXT记录验证:

acme.sh --issue --dns dns_cf -d "home.bitllion.top" --server letsencrypt --force

✅ 执行成功后,会输出证书存放路径。


4. 自动部署证书到 PVE(核心步骤)

PVE 默认证书路径:

  • 密钥:/etc/pve/nodes/pve/pveproxy-ssl.key
  • 证书链:/etc/pve/nodes/pve/pveproxy-ssl.pem

执行部署命令:

# 定义路径
LOCAL_KEY="/etc/pve/nodes/pve/pveproxy-ssl.key"
LOCAL_PEM="/etc/pve/nodes/pve/pveproxy-ssl.pem"

# 安装证书并重启PVE面板
acme.sh --install-cert -d home.bitllion.top \
--key-file $LOCAL_KEY \
--fullchain-file $LOCAL_PEM \
--reloadcmd "systemctl restart pveproxy"

执行完成后,刷新PVE网页,证书立即生效。


5. 编写全自动续签脚本(最终版)

创建脚本文件:

vi /opt/pve_ssl_auto_renew.sh

写入最终优化版脚本(你提供的脚本优化后):

#!/bin/bash
# ==================== 配置区域(自行修改) ====================
# Cloudflare 凭证
export CF_Token=xxxx
export CF_Zone_ID=xxxxx
export CF_Account_ID=xxxxx
export CF_EMAIL="xxxxxx"

# PVE 证书路径(固定无需修改)
LOCAL_KEY="/etc/pve/nodes/pve/pveproxy-ssl.key"
LOCAL_PEM="/etc/pve/nodes/pve/pveproxy-ssl.pem"
# 域名
DOMAIN="home.bitllion.top"
# =============================================================

# 自动续签证书
acme.sh --renew --dns dns_cf -d $DOMAIN --server letsencrypt

# 判断是否续签成功
if [ $? -ne 0 ]; then
    echo "[$(date)] 证书续签失败!" >> /var/log/pve_ssl_renew.log
    exit 1
fi

# 覆盖旧证书
acme.sh --install-cert -d $DOMAIN \
--key-file $LOCAL_KEY \
--fullchain-file $LOCAL_PEM \
--reloadcmd "systemctl restart pveproxy"

echo "[$(date)] PVE 证书自动续签并部署成功!" >> /var/log/pve_ssl_renew.log

赋予执行权限:

chmod +x /root/pve_ssl_auto_renew.sh

手动测试运行:

/root/pve_ssl_auto_renew.sh

6. 设置定时任务(自动续签)

acme.sh 会自动创建每日任务,我们只需要确保脚本能被调用即可。

手动添加定时任务(每天凌晨3点检查续签):

crontab -e

添加一行:

0 3 * * * /opt/pve_ssl_auto_renew.sh > /dev/null 2>&1

查看定时任务:

crontab -l

7. 查看日志(排查问题)

# 查看脚本运行日志
cat /var/log/pve_ssl_renew.log

# 查看acme.sh官方日志
acme.sh --log