导读:在自建 VPS 托管多个站点或微服务时,最让运维人员提心吊胆的莫过于**“HTTPS 证书悄悄过期”**:浏览器瞬间弹出硕大的红色安全警告阻断访客,API 通信大面积报 CERT_HAS_EXPIRED 瘫痪。
传统的单域名签发(HTTP-01 验证)不仅要求 80 端口必须公网暴露,而且每增设一个二级域名(如 api.、blog.、note.、pan.)就要繁琐地重复申请一次,管理成本极高。
开源现代运维面板 1Panel 完美集成了自动化证书管理生态。本文将带你通过 Cloudflare DNS-01 API 验证机制,在 1Panel 中一键申请覆盖根域与全部二级域的 *.example.com 泛域名证书,并打通 60 天静默自动轮转 与 OpenResty 热重载管道,实现全站 HTTPS 一次配置、终身无感!


🎯 核心目标与 DNS-01 验证优势

相比传统的 HTTP-01 文件验证,DNS-01 挑战验证具备压倒性优势:

  1. 支持通配符泛域名(Wildcard):单张证书同时覆盖 example.com 与全部子域名 *.example.com,后续增加新服务无需重复申证书;
  2. 无需暴露 80 端口:即使服务只在内网运行、端口不公开或尚未绑定公网 Web 容器,也能直接通过 DNS 解析记录顺利完成安全验证;
  3. 零停机热重载:续期成功后自动触发 OpenResty 平滑 nginx -s reload,不掉线、不断流。

🖥️ 基础环境与全局变量定义

在操作前,先明确核心变量定义:

BASH
# ================= 全局参数定义 =================
PRIMARY_DOMAIN="0000996.xyz"       # 你的核心主域名 (已托管在 Cloudflare)
PANEL_PORT="10086"                 # 1Panel 面板管理端口
CF_TOKEN_NAME="1Panel-DNS-Token"   # Cloudflare 专用 API 令牌名称
# ================================================

💻 第一步:在 Cloudflare 获取最小权限 API 令牌(安全红线)

⚠️ 【安全铁律】:
绝对不要使用拥有全量最高权限的 Global API Key! 一旦泄露可能危及你的整座 Cloudflare 账号。必须遵循最小权限原则,签发仅具备 DNS 编辑权限的专属 Token。

1. 创建专用 API 令牌步骤

  1. 登录 Cloudflare 控制台,点击右上角头像 ➔ 「我的个人资料 (My Profile)」 ➔ 「API 令牌 (API Tokens)」;
  2. 点击 「创建令牌 (Create Token)」 ➔ 找到 「编辑区域 DNS (Edit zone DNS)」 模板,点击使用;
  3. 权限配置:
    • 区域 (Zone) - DNS - 编辑 (Edit)
  4. 区域资源限制:
    • 包含 (Include) ➔ 特定区域 (Specific zone) ➔ 选中你的主域名(例如 0000996.xyz);
  5. 点击 「继续以显示摘要」 ➔ 「创建令牌」;
  6. 复制生成的这一长串 Token 字符串(只展示一次,妥善保管)。

💻 第二步:在 1Panel 中接入 DNS 账户

登录你的 1Panel 管理后台(https://YOUR_IP:10086)。

1. 添加 Cloudflare DNS 凭据

  1. 进入左侧导航栏 「证书」 ➔ 「DNS 账户」 标签页;
  2. 点击右上角 「创建 DNS 账户」;
  3. 填入参数:
    • 名称:CF-Auto-DNS
    • DNS 提供商:选择 Cloudflare
    • 授权类型:选择 API Token(推荐)
    • Token:粘贴第一步在 Cloudflare 生成的专用令牌;
  4. 点击 「确认」。1Panel 会自动调用接口测试鉴权,显示“状态正常”。

💻 第三步:一键申请泛域名证书(双域名覆盖避坑)

💡 【新手经典大坑】:
很多朋友在申请通配符证书时,域名只填了 *.0000996.xyz。
这样申请出来的证书无法匹配没有前缀的根域名 0000996.xyz!当访客直接裸域访问时依然会报证书不信任。
正确姿势:必须同时添加根域名和通配域名两个条目!

1. 创建证书申领任务

  1. 进入 「证书」 ➔ 「证书」 列表 ➔ 点击 「申请证书」;
  2. 基本信息配置:
    • 主域名:0000996.xyz
    • 其他域名(每行一个):
      TEXT
      *.0000996.xyz
    • 验证方式:选择 「DNS 验证」;
    • DNS 账户:选择刚才创建的 CF-Auto-DNS;
    • ACME 账户:选择或新建一个绑定你邮箱的 Let's Encrypt / ZeroSSL 账户;
    • 算法:推荐选择 EC-384 或 RSA-2048(EC 算法性能更高、握手延迟更低);
    • 自动续签:勾选 「启用」(核心!默认在到期前 30 天自动发起轮转)。
  3. 点击 「确认」 发起申请。

1Panel 会通过 API 自动在你的 Cloudflare 添加 _acme-challenge TXT 记录,等待 DNS 传播完成核验,约 1~2 分钟即可完成签发,状态变为绿色 “正常”!


💻 第四步:绑定 OpenResty / 反代网站并配置热重载钩子

申请好的泛域名证书,必须自动推送并挂载到 OpenResty 站点中。

1. 网站绑定泛域名证书

  1. 进入 1Panel 「网站」 列表 ➔ 点击目标网站(例如 blog.0000996.xyz)的 「配置」;
  2. 切换到 「HTTPS」 标签页;
  3. 开启 HTTPS,证书来源选择 「已有证书」;
  4. 在下拉列表中直接选中刚才申请好的泛域名证书 0000996.xyz;
  5. 点击 「保存」。

2. 自动化续期热重载(Reload Hook)

1Panel 在底层为每个应用了该证书的网站配置了自动钩子。
每当证书到期由后台定时任务成功轮转后,1Panel 会自动把最新证书写盘到 /opt/1panel/apps/openresty/openresty/conf/ssl/,并执行:

BASH
docker exec -i 1panel-openresty nginx -s reload

全流程无需人工登录服务器,全站成百上千个子站点自动无感更新!


🔍 验证测试:阶梯核实验收

1. 验证公网证书链与生效时间

在本地电脑或服务器终端使用 curl 探测域名证书详情:

💻 【你自己的电脑】

BASH
# 查看远程 HTTPS 证书颁发者与有效期
curl -Iv "https://0000996.xyz" 2>&1 | grep -E "Server certificate|start date|expire date|common name"

核验标准:common name 包含 0000996.xyz 或 *.0000996.xyz,有效期长达 90 天,且签发机构为 Let's Encrypt / ZeroSSL。

2. 现场模拟证书静默续期(Dry Run)

在 1Panel 证书列表页面,找到该证书,点击右侧操作中的 「手动续签」。
观察操作日志流水:

  • 写入 Cloudflare _acme-challenge 成功;
  • ACME 验证成功;
  • OpenResty 重载成功。
    证实整条自动化轮转管线百分之百通畅!

🚨 翻车急救站(常见避坑 FAQ)

Q1:申请时一直停在“等待 DNS 验证”最终超时失败?

  • 根因:Cloudflare API Token 权限不足,或者解析被意外缓存拦截。
  • 自愈方案:
    1. 确认该 Token 是否拥有对应 Zone 的 DNS:Edit 权限;
    2. 登录 Cloudflare 后台,检查在申请过程中是否成功出现一条名为 _acme-challenge 的 TXT 临时记录。

Q2:申请完后访问某些二级域名仍然报证书不受信任?

  • 根因:通配符 *.example.com 只能覆盖单层子域名(如 a.example.com),无法覆盖多级子域名(如 test.api.example.com)。
  • 自愈方案:如果有深层嵌套子域名,必须在申请时将 *.api.example.com 作为单独一行附加到证书域名列表中。

📋 毕业打钩自检清单

  • Cloudflare 成功生成专用的最小权限 DNS 编辑 API Token
  • 1Panel 成功接入 DNS 账户且连通测试通过
  • 证书申请同时覆盖了主域名 example.com 与通配域名 *.example.com
  • 证书列表中成功显示状态为绿色“正常”,有效期 ~90 天
  • 证书勾选了“自动续签”,由面板守护进程每 60 天自动轮转
  • OpenResty 站点已完成泛域名证书挂载,公网测试 HTTPS 200 绿锁直出