5 分钟内完成您的第一个 HTTPS 证书自动化配置。
您拥有一个域名
域名使用支持的 DNS 服务商(Cloudflare / 阿里云 / 腾讯云等)
您有一台需要部署证书的 Linux 服务器
请根据您的操作系统下载对应的安装包:
| 系统 | 下载链接 |
|---|---|
| macOS (Apple Silicon) | CertGo-arm64.dmg |
| macOS (Intel) | CertGo-amd64.dmg |
打开 CertGo 桌面客户端
点击「新建配置」
按向导完成配置:
第 1 步:输入域名(支持通配符如 *.example.com)
第 2 步:选择 CA 和 DNS 服务商
第 3 步:配置证书保存路径
第 4 步:测试签发验证配置
在基础配置中填写域名并开始向导,适合作为首个自动化配置入口。

在集成设置中选择 ACME CA 与 DNS 服务商,完成验证方式与解析授权配置(未配置DNS服务商时先添加服务商)。
未添加服务商状态:

已添加服务商的状态:

等待测试签发完成
点击配置管理,选择刚才创建的配置,点击「部署」
根据部署引导完成部署
部署配置中可选择 Nginx / Apache / Caddy,并设置证书路径与重载命令。


证书已签发并部署,后续续期由系统自动守护处理。
另外,如果你是用宝塔面板搭建的站点,而且有多个二级域名共享同一个证书,那这时还要做个自动化将证书分别复制到站点所在的证书保存路径。并且证书自动更新的时候,也能同步更新各站点下的证书。具体按以下操作即可:
1、新增脚本文件/www/certgo_sync_bt.sh
#!/bin/bash
set -e
# CertGo YAML配置文件路径 ,请根据实际路径填写!!!!!
YAML_CONFIG="/root/.certgo/configs/example.yaml"
# 源证书(certgo deploy输出路径),请根据实际路径填写!!!!!
FULLCHAIN_SRC="/etc/nginx/ssl/example.com.pem"
PRIVKEY_SRC="/etc/nginx/ssl/example.com.key"
# 宝塔证书根目录,没特别改动的话,默认是这个路径
BT_CERT_ROOT="/www/server/panel/vhost/cert"
# 脚本迁移至/www,日志放在/www
LOG_FILE="/www/certgo_sync.log"
# 校验源证书
if [ ! -f "${FULLCHAIN_SRC}" ] || [ ! -f "${PRIVKEY_SRC}" ];then
echo "[$(date '+%Y-%m-%d %H:%M:%S')]源证书文件不存在,退出" >> "${LOG_FILE}"
exit 0
fi
# 解析yaml,提取certificate.domains下全部域名
DOMAINS=$(grep -A20 "certificate:" "${YAML_CONFIG}" \
| grep -E '^\s*- ' \
| sed -E 's/^\s*-\s*//')
CHANGED=0
for domain in ${DOMAINS}; do
DST_DIR="${BT_CERT_ROOT}/${domain}"
FULLCHAIN_DST="${DST_DIR}/fullchain.pem"
PRIVKEY_DST="${DST_DIR}/privkey.pem"
mkdir -p "${DST_DIR}"
if ! cmp -s "${FULLCHAIN_SRC}" "${FULLCHAIN_DST}" || ! cmp -s "${PRIVKEY_SRC}" "${PRIVKEY_DST}" ; then
cp "${FULLCHAIN_SRC}" "${FULLCHAIN_DST}"
cp "${PRIVKEY_SRC}" "${PRIVKEY_DST}"
chmod 644 "${FULLCHAIN_DST}"
chmod 600 "${PRIVKEY_DST}"
echo "[$(date '+%Y-%m-%d %H:%M:%S')]同步证书至 ${domain}" >> "${LOG_FILE}"
CHANGED=1
fi
done
# 有证书更新,仅重载一次宝塔Nginx
if [ ${CHANGED} -eq 1 ]; then
/www/server/nginx/sbin/nginx -t
if [ $? -eq 0 ];then
/www/server/nginx/sbin/nginx -s reload
echo "[$(date '+%Y-%m-%d %H:%M:%S')]全部域名证书同步完成,Nginx重载成功" >> "${LOG_FILE}"
else
echo "[$(date '+%Y-%m-%d %H:%M:%S')]Nginx配置检测失败,跳过reload" >> "${LOG_FILE}"
exit 1
fi
fichmod +x /www/certgo_sync_bt.sh #执行脚本测试 /www/certgo_sync_bt.sh #查看日志 cat /www/certgo_sync.log #校验证书目录是否生成 ls -la /www/server/panel/vhost/cert/
3、设置定时任务,自动更新证书(重点!更新脚本路径)
1)、进入宝塔计划任务
登录宝塔 → 左侧菜单【计划任务】→ 右上角【添加任务】宝塔面板
2)、填写任务参数
任务类型:Shell脚本
任务名称:填写 CertGo证书同步宝塔Nginx
执行周期:选择 N小时
含义:每 1 小时,第 0 分钟(整点)执行,等价 0 * * * *
小时:1
分钟:0
执行用户:root(必须 root,否则读不到 certgo 配置文件)
脚本内容:直接写完整命令调用已经写好的脚本文件
/www/certgo_sync_bt.sh
注意:不要把整个 shell 脚本粘贴在这里!脚本已经保存在 /www/certgo_sync_bt.sh,这里只写调用命令。
点击【添加任务】保存。
3)、测试任务是否可用
在计划任务列表,找到刚创建的任务,点右侧【执行】按钮,手动运行一次。
执行完看日志:点击【日志】,查看输出。 同时服务器上查看日志确认:
cat /www/certgo_sync.log
4)、核对关键点
脚本权限确认:
chmod +x /www/certgo_sync_bt.sh
执行用户必须是root,否则无法读取 /root/.certgo/下面的 yaml 配置。
certgo daemon 服务依旧由 systemd 托管,宝塔计划任务只管同步证书,不负责申请证书。
如果想要每 30 分钟检测一次(可选)
编辑该计划任务,执行周期改为:
N分钟,填 30脚本内容不变。
在开始之前,请前往 ACME 账号管理 页面获取您的EAB KID 和EAB MAC Key。
使用官方安装脚本进行安装(请将 email 替换为您的真实邮箱,用于接收证书过期通知):
curl https://get.acme.sh | sh -s email=461960962@qq.com
安装完成后,您可能需要重新加载 Shell 配置文件:
source ~/.bashrc
使用之前获取的 EAB 信息注册账户。此步骤只需执行一次Register Account:
acme.sh --register-account --server https://acme.litessl.com/acme/v2/directory \ --eab-kid "YOUR_KID" \ --eab-hmac-key "YOUR_MAC_KEY"
以阿里云为例,首先导出 API Key:
export Ali_Key="YOUR_ACCESSKEY_ID" export Ali_Secret="YOUR_ACCESSKEY_SECRET"
然后执行申请命令:
acme.sh --issue --server https://acme.litessl.com/acme/v2/directory --dns dns_ali -d "example.com" -d "*.example.com"
需要指定网站根目录(Webroot):
acme.sh --issue --server https://acme.litessl.com/acme/v2/directory -w /home/wwwroot/example.com -d "example.com"
5. 部署与安装注意
请勿直接使用 ~/.acme.sh/ 目录下的证书文件,因为它们可能会在内部结构更改时发生变化。请使用 --install-cert 命令。
将证书安装到 Nginx/Apache 目录,并配置自动重载Deploy to Nginx:
acme.sh --install-cert -d "example.com" \ --key-file /etc/nginx/ssl/example.com.key \ --fullchain-file /etc/nginx/ssl/fullchain.cer \ --reloadcmd "service nginx force-reload"
acme.sh 会自动为您配置 crontab 定时任务,每天检查证书是否需要续期。 无需任何额外操作。您可以通过 crontab -l 查看任务。