PVE 配置 acme.sh + Cloudflare 实现 https 证书自动续签(DNS 验证)

此方案本身要求域名托管在 Cloudflare (即 NS 指向 Cloudflare)。
本着安全和最小权限的原则,本方案我们使用 User API Token + Zone ID(区域 ID) 的方式进行授权。
1. Cloudflare 配置 API Token
Cloudflare 现在 API 的管理非常让人迷惑,有一个 Account API Token,还有一个 User API Token。中文分别翻译做了账户和用户,这个翻译就会让人更迷惑。
User API token 生成需要点击右上角的个人 icon,选择 Profile,在新打开的 My Profile 页面左侧找到 API Tokens,然后就可以找到 User API Tokens 界面。
权限的话,只需要配置 Zone.Zone(只读)和 Zone.DNS(编辑)两个权限就可以,具体的菜单项配置可参考下图。
2. 获取域名对应的 Zone ID
Zone 区域的概念和域名是对应的,所以我们首先要控制台首页进入对应的域名配置页。
进入后在 Overview 页面,右侧页面一直往下滑,最下方的 API 处就会有对应的 Zone ID。
3. 配置数据中心(Datacenter)插件
3.1 证书签发前登记(注册账户)
在 Datacenter 的设置中找到 ACME,首先在上方的 Account 中添加一个账户,名称(Account Name)可依据个人偏好随意填写,邮件地址填写个人邮箱。
ACME Directory 这里有两个选项:Let's Encrypt V2 可视作“生产环境”,有严格的频率限制,超限后会一段时间被暂停服务;Let's Encrypt V2 Staging 可是做“测试环境”,这里可用来多次高频的实验性签发,证书会带有 Staging 的标志,且证书仅用于技术可行性验证,并不保证可靠性。
完成点击接受 TOS 协议,注册即可。
3.2 配置 ACME 插件(Plugin)
接下来到下方配置插件。点击添加按钮,Plugin ID 可依据个人喜好自行配置,DNS API 选择“Cloudflare Managed DNS”,然后填写前面两步获取的 CF_Token 和 CF_Zone_ID 两个参数,部分格式提示见图片。
4. 配置主机证书
接下来我们把视角从数据中心切换到单台宿主机(图示为 pve),进入宿主机的系统设置(System),选择证书(Certificates),在下方的 ACME 中点击添加。
既然没有 Web 对外暴露,Challenge Type 我们只能选择 DNS 方式,插件选择刚刚建立的插件(这里下拉选项里应该能看到刚刚创建的 Plugin ID),Domain 中填写机器对应的域名即可。
上述步骤全部完成后,点击 Order Certificates Now,即可自动更新。
后续,系统会根据 3.2 中 Validation Delay 的配置要求,在证书到期前的特定日期,自动发起证书的需求和 Web 的重启生效。



