导读:在自建 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 挑战验证具备压倒性优势:
- 支持通配符泛域名(Wildcard):单张证书同时覆盖
example.com与全部子域名*.example.com,后续增加新服务无需重复申证书; - 无需暴露 80 端口:即使服务只在内网运行、端口不公开或尚未绑定公网 Web 容器,也能直接通过 DNS 解析记录顺利完成安全验证;
- 零停机热重载:续期成功后自动触发 OpenResty 平滑
nginx -s reload,不掉线、不断流。
🖥️ 基础环境与全局变量定义
在操作前,先明确核心变量定义:
# ================= 全局参数定义 =================
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 令牌步骤
- 登录 Cloudflare 控制台,点击右上角头像 ➔ 「我的个人资料 (My Profile)」 ➔ 「API 令牌 (API Tokens)」;
- 点击 「创建令牌 (Create Token)」 ➔ 找到 「编辑区域 DNS (Edit zone DNS)」 模板,点击使用;
- 权限配置:
区域 (Zone)-DNS-编辑 (Edit)
- 区域资源限制:
- 包含 (Include) ➔ 特定区域 (Specific zone) ➔ 选中你的主域名(例如
0000996.xyz);
- 包含 (Include) ➔ 特定区域 (Specific zone) ➔ 选中你的主域名(例如
- 点击 「继续以显示摘要」 ➔ 「创建令牌」;
- 复制生成的这一长串 Token 字符串(只展示一次,妥善保管)。
💻 第二步:在 1Panel 中接入 DNS 账户
登录你的 1Panel 管理后台(https://YOUR_IP:10086)。
1. 添加 Cloudflare DNS 凭据
- 进入左侧导航栏 「证书」 ➔ 「DNS 账户」 标签页;
- 点击右上角 「创建 DNS 账户」;
- 填入参数:
- 名称:
CF-Auto-DNS - DNS 提供商:选择
Cloudflare - 授权类型:选择
API Token(推荐) - Token:粘贴第一步在 Cloudflare 生成的专用令牌;
- 名称:
- 点击 「确认」。1Panel 会自动调用接口测试鉴权,显示“状态正常”。
💻 第三步:一键申请泛域名证书(双域名覆盖避坑)
💡 【新手经典大坑】:
很多朋友在申请通配符证书时,域名只填了*.0000996.xyz。
这样申请出来的证书无法匹配没有前缀的根域名0000996.xyz!当访客直接裸域访问时依然会报证书不信任。
正确姿势:必须同时添加根域名和通配域名两个条目!
1. 创建证书申领任务
- 进入 「证书」 ➔ 「证书」 列表 ➔ 点击 「申请证书」;
- 基本信息配置:
- 主域名:
0000996.xyz - 其他域名(每行一个):TEXT
*.0000996.xyz - 验证方式:选择 「DNS 验证」;
- DNS 账户:选择刚才创建的
CF-Auto-DNS; - ACME 账户:选择或新建一个绑定你邮箱的 Let's Encrypt / ZeroSSL 账户;
- 算法:推荐选择
EC-384或RSA-2048(EC 算法性能更高、握手延迟更低); - 自动续签:勾选 「启用」(核心!默认在到期前 30 天自动发起轮转)。
- 主域名:
- 点击 「确认」 发起申请。
1Panel 会通过 API 自动在你的 Cloudflare 添加 _acme-challenge TXT 记录,等待 DNS 传播完成核验,约 1~2 分钟即可完成签发,状态变为绿色 “正常”!
💻 第四步:绑定 OpenResty / 反代网站并配置热重载钩子
申请好的泛域名证书,必须自动推送并挂载到 OpenResty 站点中。
1. 网站绑定泛域名证书
- 进入 1Panel 「网站」 列表 ➔ 点击目标网站(例如
blog.0000996.xyz)的 「配置」; - 切换到 「HTTPS」 标签页;
- 开启 HTTPS,证书来源选择 「已有证书」;
- 在下拉列表中直接选中刚才申请好的泛域名证书
0000996.xyz; - 点击 「保存」。
2. 自动化续期热重载(Reload Hook)
1Panel 在底层为每个应用了该证书的网站配置了自动钩子。
每当证书到期由后台定时任务成功轮转后,1Panel 会自动把最新证书写盘到 /opt/1panel/apps/openresty/openresty/conf/ssl/,并执行:
docker exec -i 1panel-openresty nginx -s reload
全流程无需人工登录服务器,全站成百上千个子站点自动无感更新!
🔍 验证测试:阶梯核实验收
1. 验证公网证书链与生效时间
在本地电脑或服务器终端使用 curl 探测域名证书详情:
💻 【你自己的电脑】
# 查看远程 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 权限不足,或者解析被意外缓存拦截。
- 自愈方案:
- 确认该 Token 是否拥有对应 Zone 的
DNS:Edit权限; - 登录 Cloudflare 后台,检查在申请过程中是否成功出现一条名为
_acme-challenge的 TXT 临时记录。
- 确认该 Token 是否拥有对应 Zone 的
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 绿锁直出