博客

  • 使用 acme.sh + Cloudflare 申请通配符 SSL 证书并部署到宝塔面板(支持自动续期)

    场景说明

    适用目标:

    • 你希望为主域名 example.com 和所有二级域名 *.example.com 配置 HTTPS。
    • 你使用的是宝塔面板管理网站,使用的是 nginx。
    • 你希望实现自动续期、无需人工干预。

    ✅第一步:配置 Cloudflare API 令牌

    1. 登录 Cloudflare
    2. 点击右上角->配置文件->api令牌
    3. 创建 API 令牌,如下:
    编辑区域dns->区域资源(设置账户的所有区域,右侧选择邮箱)
    ->客户端ip运算符选择:在,ip设置为服务器ip
    1. 创建成功后,复制你的 Token。
    2. 将 Token 写入服务器环境变量,并持久保存:
    echo 'export CF_Token="这里写token"' >> ~/.bashrc
    source ~/.bashrc

    ✅ 第二步:安装 acme.sh(如果未安装)

    curl https://get.acme.sh | sh -s email=my@example.com

    网络问题参考:https://github.com/acmesh-official/acme.sh/wiki/Install-in-China

    ✅ 第三步:使用 DNS 验证方式申请通配符证书

    acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'

    说明:

    • --dns dns_cf 表示使用 Cloudflare DNS 验证。
    • -d example.com + -d '*.example.com' 可以同时覆盖主域名和所有二级域名。

    ✅ 第四步:安装证书到宝塔面板使用的路径

    执行以下命令将证书部署到宝塔指定路径(Nginx 默认使用):

    acme.sh --install-cert -d example.com \
    --key-file /www/server/panel/vhost/cert/example.com/privkey.pem \
    --fullchain-file /www/server/panel/vhost/cert/example.com/fullchain.pem \
    --reloadcmd "nginx -s reload"

    说明:

    • 此路径是宝塔面板自动读取证书的路径。
    • example.com对应自己的域名
    • 执行后会立即 reload nginx,替换当前证书。

    ✅ 第五步:在宝塔面板站点绑定域名

    在宝塔面板对应站点绑定所有需要的域名,例如:

    example.com
    www.example.com
    api.example.com
    cdn.example.com

    使用同一个站点绑定多个域名,都会匹配证书 *.example.com


    ✅ 第六步:自动续期机制

    acme.sh 会自动续期,无需人工干预:

    • 默认每天运行 cron job 检查是否需要续期。
    • 如果续期成功,会自动执行你之前的 --install-cert 脚本,包括 reload nginx。
    • 只要 Cloudflare Token 没失效、域名 DNS 没变更,续期就会持续正常工作。

    你可以手动测试续期:

    acme.sh --renew -d example.com --force

    🔁 可选:查看证书路径

    证书文件一般位于:

    /root/.acme.sh/example.com/

    安装后的宝塔使用路径:

    /www/server/panel/vhost/cert/example.com/