概述

本文记录了将网站 kaiwen.work 的 SSL/TLS 证书从“腾讯云控制台手动申请并上传”的模式,迁移到“使用 acme.sh 实现全自动申请、部署与续期”的完整操作流程。通过此方案,服务器证书将在到期前自动更新,无需人工干预,彻底解决证书过期导致的服务中断风险。

核心组件

  • 自动化工具https://github.com/acmesh-official/acme.sh - 一个纯 Shell 脚本实现的 ACME 协议客户端,支持 Let‘s Encrypt、ZeroSSL 等证书颁发机构(CA)。
  • 验证方式:DNS API 验证(本文以腾讯云 DNSPod 为例)。
  • 证书颁发机构:Let’s Encrypt(切换自 ZeroSSL 以避免限流)。
  • Web 服务器:Nginx。

操作流程详解

第一阶段:环境准备与工具安装

  1. 安装 acme.sh
    通过以下命令一键安装,安装过程会自动创建 cron 定时任务用于后续的自动续期检查。

    # 邮箱更换为个人邮箱
    curl https://get.acme.sh | sh -s email=my@example.com

    安装后建议重载 Shell 配置或新开终端,使 acme.sh 命令生效。

  2. 配置 DNS API 凭证(关键)
    为实现自动化的域名验证,需要配置腾讯云 DNSPod 的 API 密钥。此步骤只需执行一次。

    • 在腾讯云控制台【访问管理】>【API密钥管理】创建并获取 SecretIdSecretKey
    • 临时导出到当前 Shell 环境(安全推荐):

      export Tencent_SecretId="你的SecretId"
      export Tencent_SecretKey="你的SecretKey"

第二阶段:申请证书

此步骤将触发 acme.sh 通过 ACME 协议向 CA 申请一张新证书。

  1. (可选)切换默认 CA
    如果遇到 ZeroSSL 的速率限制,可切换到对测试更友好的 Let‘s Encrypt:

    acme.sh --set-default-ca --server letsencrypt
  2. 执行证书签发命令
    使用 DNS API 模式为域名 kaiwen.work 及其子域名 www.kaiwen.work 申请证书。

    acme.sh --issue --dns dns_tencent -d kaiwen.work -d www.kaiwen.work
    • --dns dns_tencent:指定使用腾讯云 DNS API 进行验证。
    • 命令执行成功后,证书文件会生成在 ~/.acme.sh/kaiwen.work_ecc/ 目录下。

第三阶段:安装证书并配置 Nginx

使用 --install-cert 命令将其“安装”到持久化目录,并完成 Nginx 的集成。

  1. 执行安装命令
    该命令是实现自动续期的核心,它会:

    • 将证书文件复制到指定目录。
    • 在系统 Cron 中注册续期任务。
    • 设置证书更新后自动执行的命令(如重载 Nginx)。
    acme.sh --install-cert -d kaiwen.work \
      --key-file /etc/nginx/ssl/kaiwen.work.key \
      --fullchain-file /etc/nginx/ssl/kaiwen.work_bundle.crt \
      --reloadcmd "systemctl reload nginx"
  2. 确保 Nginx 配置指向正确路径
    验证 Nginx 配置文件中的 ssl_certificatessl_certificate_key 指令是否指向了上一步安装命令中指定的路径。

    # 在 Nginx 的 server 块中确认
    ssl_certificate     /etc/nginx/ssl/kaiwen.work_bundle.crt;
    ssl_certificate_key /etc/nginx/ssl/kaiwen.work.key;
  3. 测试并重载 Nginx

    nginx -t && systemctl reload nginx

第四阶段:验证与后续维护

  1. 验证自动续期系统

    • 检查 Cron 任务:执行 crontab -l | grep acme,确认存在类似 0 0 * * * "/root/.acme.sh"/acme.sh --cron ... 的定时任务。
    • 测试续期流程:可运行 acme.sh --cron --dry-run 进行模拟测试。
    • 在线验证:浏览器访问 https://kaiwen.work,点击地址栏锁图标,确认颁发者为 Let's Encrypt 且有效期为 90 天
  2. 后续维护要点

    • 无需操作:系统将在证书到期前约 30 天自动完成续期、部署和 Nginx 重载。
    • 唯一依赖:确保腾讯云 API 密钥长期有效。若密钥变更,需重新设置 Tencent_SecretIdTencent_SecretKey 环境变量。
    • 旧证书处理:之前手动申请的腾讯云证书文件在服务器上可安全删除,控制台内的记录可视情况保留或清理。

总结

通过以上四个阶段,我们成功构建了一个基于 acme.sh 的 SSL 证书自动化管理系统。该系统实现了:
零成本:使用 Let’s Encrypt 的免费证书。
全自动:证书申请、验证、续期、部署、服务重载全程无人值守。
高可靠:基于稳定的 ACME 协议和 Cron 定时任务。
易维护:配置一次,长期有效,彻底解放运维人力。

标签:无

你的评论