证书与 HTTPS
HTTPS 是 Passkey、OIDC 回调和多数公网服务的基础。证书要覆盖访问者实际使用的认证 Host 和业务 Host;只给一个内部地址或旧域名签证书,网关仍会出现浏览器警告或登录失败。
页面结构与证书来源
SSL / HTTPS 分为三个页签:
| 页签 | 管理内容 |
|---|---|
证书配置 | 当前 HTTPS 状态、网关部署方式、手动上传和证书库 |
自签证书 | 本地根 CA、受该 CA 签发的域名 / IP 服务器证书 |
ACME 证书 / DNS-01 证书 | 多个申请项、签发、续期、日志及证书库关联 |
| 来源 | 适合场景 | 注意事项 |
|---|---|---|
| 上传已有证书 | 证书已由 CDN、面板或其他工具签发 | 同时保存证书链和私钥,并记录续期责任 |
| 自签证书 | 局域网测试或临时验证 | 客户端需要手工信任,不适合普通公网访问 |
| ACME | 有可验证域名且希望自动续期 | 当前申请流程使用 DNS-01,需保护 DNS API 凭据 |
证书库与手动上传
上传区支持直接粘贴 PEM 证书与私钥;具备共享目录能力的平台还可从共享文件读取。证书和私钥必须配对,证书链应包含服务端证书及必要的中间证书。
保存时有两个动作:
| 动作 | 结果 |
|---|---|
仅保存到证书库 | 校验并入库,不改变当前对外证书 |
保存并启用 | 入库并设为当前活动 / 默认兜底证书,立即同步网关 |
证书库显示来源、覆盖域名、有效期、更新时间和 Host 覆盖状态。删除正在使用的证书会同时停用 HTTPS;清空证书库 会删除所有证书、清空网关已经收到的证书集并停用 HTTPS。只想暂时关闭 HTTPS 时,使用状态卡中的 停用 HTTPS,证书仍保留在库中。
单活动证书与多证书 SNI
证书库可以保留多张证书,部署方式与网关下发 决定网关实际收到多少张:
| 部署方式 | 网关行为 | 适合场景 |
|---|---|---|
单活动证书 | 只下发当前活动证书,所有域名统一返回它 | 一张通配符或 SAN 证书覆盖全部 Host |
多证书 SNI | 下发整个证书集合,按 TLS SNI 为域名选证书 | 不同父域或不同证书来源共用同一网关 |
多证书 SNI 仍需要一张默认 / 兜底证书。客户端没有发送 SNI、访问未知 Host 或没有证书匹配时,网关会返回默认项。切换证书部署方式后,检查页面显示的“网关当前已接收的证书集”;若已保存模式与运行模式不一致或存在同步错误,不要只依据证书库内容判断已生效。
子域场景应覆盖认证 Host 和所有对外业务 Host。通配符 *.example.com 只覆盖一层子域,不覆盖根域 example.com,也不覆盖 a.b.example.com。页面的 Host 覆盖分析会结合当前映射给出缺失项。
接收外部工具推送的证书
证书配置 → 接收外部证书 用于把证书申请和续期交给 Certd、acme.sh、lego 或 Certbot,再由这些工具把完整证书链和私钥推送到 fn-knock。fn-knock 不会通过这个入口向 CA 申请证书;它负责鉴权、校验证书、写入证书库,并在需要时更新网关。
这种方式适合以下场景:
- 已经使用 Certd 集中管理多个域名、VPS、NAS 或 CDN 的证书;
- 希望继续使用现有 acme.sh、lego 或 Certbot 续期任务,而不在 fn-knock 中重复保存 DNS API 凭据;
- 一张证书签发后需要分发到多台 fn-knock 实例;
- fn-knock 所在机器不能直接完成 DNS-01,但可以接收内部网络中的证书推送。
工作模型
一次完整部署按以下顺序执行:
- 外部工具向 CA 申请或续期证书。
- 签发成功后,Webhook 或 deploy hook 把
fullchain和私钥发送到绑定专用地址。 - fn-knock 使用该绑定的 Bearer Token 鉴权,并检查请求大小、PEM、完整证书链、证书有效期及证书与私钥是否匹配。
- 证书写入绑定对应的固定槽位
external_<binding_id>。以后续期始终替换同一条记录,不会每次增加一张证书。 - 如果该证书当前正在使用,fn-knock 会保持它的活动 / 默认角色并立即更新网关;如果它不是当前证书,则不会抢占已有的默认证书。多证书 SNI 模式会重新同步整个证书集。
- 网关下发成功后,入口显示最近接收时间、证书域名和有效期。下发失败时,请求返回非 2xx,fn-knock 尝试恢复旧配置,外部工具应把本次部署标记为失败并按其策略重试。
如果 fn-knock 还没有任何当前证书,第一张通过外部入口成功推送的证书会自动设为当前证书并下发网关。若已经存在当前证书,新建入口第一次收到的证书默认只加入证书库;需要替换默认对外证书时,再从证书库手工启用。
| 工具 | fn-knock 生成的配置 | 调用时机 |
|---|---|---|
| Certd | PUT Webhook 地址、Header、JSON 模板和成功标志 | 在 Certd 证书流水线中添加“Webhook 方式部署证书”步骤 |
| acme.sh | 包含地址和 Token 的 deploy hook 脚本 | 签发后执行 --deploy-hook fnknock |
| lego | 兼容 lego v5 deploy hook 和 v4 renew hook 的脚本 | 续期命令或 .lego.yaml 调用脚本 |
| Certbot | 读取 RENEWED_LINEAGE 的 deploy hook 脚本 | 放入 renewal hook 目录,或由 certbot renew --deploy-hook 调用 |
创建证书接收入口
- 打开
SSL 证书 → 证书配置,展开接收外部证书。 - 在“证书工具”中选择 Certd、acme.sh、lego 或 Certbot。
- 输入能够区分证书或目标节点的入口名称,例如
Certd example.com或Certbot gateway-01。 - 点击
创建接收入口。 - 立即复制页面生成的全部配置。Token 只在创建入口或重新生成 Token 后显示一次;关闭配置区后无法再次读取原 Token。
一个入口对应一个固定证书槽位和一个独立 Token。不要让多个不相关证书共用同一入口,否则后一次推送会替换前一次推送的证书。多台 fn-knock 实例也不要共用 Token;应在每台实例分别创建入口。
选择公网、局域网或本机入口
创建绑定后,推送入口 会按可用性显示三类地址:
| 证书工具位置 | 推荐入口 | 条件与边界 |
|---|---|---|
| 其他设备或云端 | 公网 HTTPS | 鉴权 Host 已配置 HTTPS;请求只进入网关保留路径,无需开放管理端口 |
| 同一可信局域网 | 局域网 HTTPS | 管理员显式启用允许的 RFC1918 IPv4,网关不是仅回环监听,且已有默认证书 |
| 与 fn-knock 同机 | 本机兼容地址 | 使用管理后端回环地址;只适合同一主机或同一网络命名空间 |
公网地址形如 https://auth.example.com/__certificates__/<BINDING_ID>。只有配置中的 HTTPS 鉴权 Host 才接受这条保留路径;它不建立管理会话,也不会暴露其他管理 API。跨设备部署优先使用这一入口,并确保鉴权 Host 的证书和外部解析正常。
局域网入口在 接收外部证书 → 局域网设置 中启用。每行填写一个实际属于本机的 RFC1918 IPv4,最多 16 个;Docker 宿主机地址可以手工添加。入口复用当前网关端口和默认证书,不新增监听端口,也不签发 IP 专用证书。通过 IP 访问通常会发生证书名称不匹配,只有页面为所选 LAN 入口生成的脚本才可按管理员选择使用 curl -k 或 Certd 的忽略 TLS 校验;不要把该配置复制到公网入口。
本机兼容地址仍使用 http://127.0.0.1:${BACKEND_PORT}/api/integrations/certificates/<BINDING_ID>。管理后端默认只监听回环,因此宿主机的 127.0.0.1 不等于隔离容器内部回环地址。不要为了远程推送而公开整个 BACKEND_PORT;使用公网鉴权 Host 或受控 LAN 入口。
三类入口使用相同的绑定 Token、请求格式、大小限制、证书校验、幂等与回滚逻辑。Token 不限制证书 SAN,可以推送任意域名证书并接管证书库中相同 SAN 的已有证书,属于证书管理员凭据;不要写入 URL、查询参数、代理日志或脚本调试输出,泄露后立即轮换或停用绑定。
在 Certd 中配置 Webhook
创建 Certd 类型的入口后,把 fn-knock 显示的字段复制到 Certd 对应证书流水线:
- 确保证书流水线已经有成功输出域名证书的申请任务。
- 在申请任务之后添加
Webhook 方式部署证书步骤。 - “域名证书”选择前置申请任务输出的证书,不要选择另一张无关证书。
- 按下表填写部署参数,然后保存流水线。
| Certd 字段 | 填写值 | 说明 |
|---|---|---|
| 任务名称 | 推送证书到 fn-knock | 可按目标节点命名 |
| Webhook 地址 | fn-knock 显示的推送地址 | 按工具位置选择公网 HTTPS、局域网 HTTPS 或本机兼容地址 |
| 请求方式 | PUT | 不要改成 POST |
| ContentType | application/json | 保证 Certd 按 JSON 发送 |
| Headers | Authorization=Bearer fnk_cert_<YOUR_TOKEN> | Certd 此处使用 key=value 格式;完整 Token 只应从 fn-knock 页面复制 |
| 消息 body 模板 | {"cert":"${crt}","key":"${key}"} | ${crt} 是完整证书内容,${key} 是私钥 |
| 忽略证书校验 | 通常关闭 | 只在页面所选 LAN IP 入口复用默认证书并发生名称不匹配时开启;公网 HTTPS 必须保持校验 |
| 成功判定 | "success":true | 响应同时必须是 2xx;非 2xx 应视为失败 |

图中的 <BINDING_ID> 和 fnk_cert_<YOUR_TOKEN> 是文档占位符,不能原样使用。实际值必须从刚创建或刚轮换的入口复制。Header 是 Authorization=Bearer ...,不是 HTTP 文档中常见的冒号写法 Authorization: Bearer ...,因为 Certd 这个输入框要求每行使用 key=value。
保存后手工运行一次 Certd 流水线。只运行 Webhook 步骤前,应确认它能够读取前置任务的证书输出。部署成功时 Certd 显示步骤成功,fn-knock 返回包含 "success":true 的 JSON,并更新入口的最近接收状态。
使用 acme.sh、lego 或 Certbot
这三种工具不需要手工拼接 JSON。选择对应工具并创建入口后,fn-knock 会生成已经嵌入推送地址和 Token 的脚本;脚本使用 jq 安全构造包含 PEM 换行的 JSON,并使用 curl 发送请求。保存脚本的文件必须限制权限,且不应把脚本内容打印到 CI 日志。
acme.sh
- 把生成脚本保存为
~/.acme.sh/deploy/fnknock.sh。 - 执行
chmod 700 ~/.acme.sh/deploy/fnknock.sh。 - 证书签发成功后执行:
~/.acme.sh/acme.sh --deploy -d example.com --deploy-hook fnknock脚本使用 acme.sh deploy hook 传入的私钥和 fullchain 参数。通配符证书应使用该证书在 acme.sh 中的主域名执行部署,不要把 --deploy 当成重新签发命令。
lego
- 把生成脚本保存到固定路径并执行
chmod 700 /path/to/fn-knock-lego-hook.sh。 - lego v5 使用:
lego --deploy-hook=/path/to/fn-knock-lego-hook.sh renew也可以在 .lego.yaml 的 hooks.deploy.command 中配置。仍使用 lego v4 时,改用 --renew-hook=/path/to/fn-knock-lego-hook.sh。fn-knock 生成的脚本同时识别 v5 的 LEGO_HOOK_* 和 v4 的兼容环境变量。
Certbot
- 把生成脚本保存为
/etc/letsencrypt/renewal-hooks/deploy/fn-knock。 - 执行
chmod 700 /etc/letsencrypt/renewal-hooks/deploy/fn-knock。 - 执行一次演练或指定 hook:
certbot renew --deploy-hook /etc/letsencrypt/renewal-hooks/deploy/fn-knock脚本从 Certbot 的 RENEWED_LINEAGE 读取 fullchain.pem 和 privkey.pem。deploy hook 只会在成功续期后运行;如果只是验证脚本,应使用 Certbot 提供的测试方式,并确认测试不会把暂存证书当作正式证书推送。
首次推送、续期与部署角色
| 推送前状态 | fn-knock 的行为 |
|---|---|
| 没有当前证书 | 创建固定外部证书记录,自动设为当前证书并同步网关 |
| 已有其他当前证书,处于单活动证书模式 | 新证书加入证书库但不改变当前对外证书 |
| 该入口的证书已经是当前证书 | 原位替换并继续保持当前证书角色,随后更新网关 |
| 多证书 SNI 模式 | 原位替换该入口的证书,并重新同步整个证书集;原默认项保持不变 |
| 重复推送完全相同的证书与私钥 | 幂等成功,不重复写入证书库,也不触发无意义的网关重载 |
| 推送的证书到期时间早于槽位中的现有证书 | 返回 409 Conflict,防止旧证书意外回滚当前证书 |
系统会校验证书链顺序、签名关系、中间证书的 CA / Key Usage、链中每张证书的生效时间和到期时间,以及叶证书与私钥是否匹配。只上传叶证书而缺少必要中间证书、证书链顺序错误、证书尚未生效、证书已过期或证钥不匹配都会被拒绝。请求体上限为 1 MiB。
证书来源记录为“外部推送”,并保留 source_provider 以区分 Certd、acme.sh、lego 和 Certbot。状态与日志只记录绑定、结果、证书指纹、域名和有效期,不应记录 PEM 私钥或明文 Token。
验证是否成功
推送后按以下顺序检查:
- 外部工具的部署任务返回成功,而不是仅完成证书申请。
- fn-knock 入口显示
接收中和最近接收成功,并显示正确域名、最近接收时间和证书到期时间。 - 证书库中只有一个与该入口关联的外部证书记录;再次续期后记录数量不增加。
- 如果该证书应当对外生效,确认它是当前 / 默认证书,或已经进入多证书 SNI 的网关证书集。
- 从实际访问链路检查网关返回的证书:
openssl s_client \
-connect auth.example.com:443 \
-servername auth.example.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates -ext subjectAltName
“最近接收成功”表示 fn-knock 已接受本次内容;是否已经成为公网证书仍取决于活动证书角色、部署模式,以及公网是否确实到达这台网关。
管理入口与 Token
暂停接收:入口和现有证书都保留,但新的推送返回不可用;适合临时停止自动更新。重新生成 Token:旧 Token 立即失效,新 Token 只显示一次。必须同步更新 Certd 或 deploy hook 脚本,使用旧 Token 的任务会返回401。保存名称:只改变入口显示名称,不改变证书槽位、URL、Token 或已保存证书。删除入口:撤销该部署地址和 Token,但默认保留已经导入的证书,避免删除入口时中断正在使用的 HTTPS。需要清理证书时再到证书库操作。
Token 不能调用 /api/admin/ssl/* 管理接口,也不能操作其他绑定,但能向自己的绑定推送任意 SAN,并接管证书库中相同 SAN 的已有证书。不要把管理会话 Cookie 用于自动部署,也不要把绑定 Token 当作普通 Webhook 密钥低权限保存。
多台 fn-knock 实例
Certd 集中向多台 VPS 或 NAS 分发时,应在每台 fn-knock 上分别创建入口,并在 Certd 流水线中为每个实例添加独立部署步骤:
申请 / 续期证书
├── 推送到 fn-knock gateway-01(独立 URL + Token)
├── 推送到 fn-knock gateway-02(独立 URL + Token)
└── 推送到 CDN 或其他服务这样单个 Token 泄露、某台节点不可达或某次网关同步失败,不会扩大为所有节点共用凭据。应让 Certd 分别记录每个部署步骤的结果,不要用一个脚本吞掉部分节点的失败状态。
外部推送排查
| HTTP 状态 | 常见原因 | 处理方式 |
|---|---|---|
400 Bad Request | JSON 格式错误、PEM 损坏、证书链不完整 / 顺序错误、证钥不匹配、证书尚未生效或已过期 | 检查外部工具传入的是 fullchain 和对应私钥;Certd 保持 ${crt} / ${key} JSON 模板 |
401 Unauthorized | Token 缺失、复制错误、已经轮换,或 Certd Header 格式错误 | 从 fn-knock 重新生成 Token,并完整更新 Authorization=Bearer ... |
404 Not Found | 绑定已删除、已暂停,或 URL 中的绑定 ID 不存在 | 检查入口状态和完整推送路径;不要复用另一个实例的 URL |
409 Conflict | 新证书比现有证书更早到期,或高并发修改导致无法安全提交 | 确认流水线没有推送旧产物;稍后重试并避免多个任务同时写同一入口 |
413 Payload Too Large | JSON 请求超过 1 MiB | 检查是否误把日志、PKCS#12、重复证书或无关内容拼入 PEM |
500 Internal Server Error | 保存配置或部署状态失败 | 查看 fn-knock 运行日志和磁盘 / 配置存储状态,外部工具应保留失败并重试 |
502 Bad Gateway | 证书已校验,但同步网关失败;响应会说明是否确认恢复旧配置 | 先确认当前公网证书是否仍为旧证书,再检查网关状态和 fn-knock 日志后重试 |
如果 Certd 显示申请成功但 fn-knock 一直显示“等待首次推送”,说明流水线没有执行部署步骤、推送入口无法连接,或部署步骤选择了错误的前置证书输出。先从 Certd 任务日志确认请求确实发出,再按所选入口检查鉴权 Host HTTPS、LAN 地址允许列表和网关监听,或本机回环链路。
自签根 CA
自签证书 的使用顺序:
- 初始化根证书并下载根 CA。
- 在所有需要访问的客户端或受管设备中把根 CA 安装为受信任根证书。
- 在域名与 IP 列表中加入实际访问名称。
- 点击
一键部署签发并安装服务器证书,或下载服务器证书自行使用。
服务器证书有效期为 20 年。长期有效不代表可以忽略私钥保护或吊销计划。重新生成或清除根 CA 会让原根 CA 签发的服务器证书失去信任,界面因此要求两次确认;执行前应准备新根证书的分发和回退方案。
自签证书适合受控局域网、测试设备或能够统一下发根证书的环境。公网访客、第三方 OIDC 和不受控客户端通常应使用公开可信 CA。
ACME 申请项
非 Windows 平台首次使用时,先在 系统设置 → ACME 初始化 acme.sh,并按需选择默认 CA。切换 CA 只影响后续申请和自动续期,不会立即替换已经签发或部署的证书。
每个 ACME 申请项独立保存:
- 名称与一个或多个域名;
- DNS 服务商及该项使用的 API 凭据;
- 自动续期开关;
- 当前证书、证书库关联和最近任务状态。
保存 只修改申请项;保存并申请 会立即提交签发任务。签发成功后证书自动同步到证书库,但不一定成为当前证书:单活动模式下可再执行 设为当前证书,多证书 SNI 模式则应确认它已经进入网关证书集。
同一申请项续期或重新签发时,系统会原位替换已经关联的证书库记录,并保留它原有的标签及活动 / 默认部署角色,避免重复增加证书。修改域名后的签发任务若失败或被停止,会保留之前可用的签发结果;新证书向网关下发失败时,系统会尝试恢复并重新下发上一份 SSL 配置。若期间已有更新的并发配置,则保留并下发更新配置。任务仍会以失败结束,需从日志确认是已恢复上一配置、保留更新配置,还是安全配置也未能恢复。
申请项菜单还可查看任务日志、下载证书、手动更新到证书库、部署、删除证书或删除申请项。两种删除的范围不同:
| 操作 | 保留内容 |
|---|---|
| 删除证书 | 保留申请项配置,移除当前保存的签发结果及证书库关联 |
| 删除申请项 | 删除申请配置;已有证书和关联也会随该项清理 |
任务执行或自动续期时,仍可编辑并保存申请项的 DNS 配置;再次申请、部署、删除等会与当前任务冲突的操作保持锁定。任务日志会提示 DNS 凭据、DNS API 限流或 ACME 频率限制等方向。停止任务会先标记取消并终止当前任务拥有的进程组,等待执行器与运行锁都结束后才报告成功;若页面显示仍有 PID 或停止错误,不要立即启动第二个任务,应先确认旧进程已经退出。
自动续期调度与恢复
启用自动续期的申请项会在服务启动后立即检查,此后默认每 6 小时扫描一次。证书距离过期不超过 30 天时进入续期队列;多个申请项会按到期时间从近到远依次处理,避免并发调用 DNS API 和 ACME 客户端。
- 自动扫描与单项签发任务分别使用带所有权和心跳的运行锁,服务内不会同时执行重复续期;已有手动任务运行时,本轮扫描会安全跳过。
- 服务重启后会把没有本进程执行器的
queued/running任务恢复为已停止,并清理其遗留运行锁,再重新扫描;运行中的停止操作会等原执行器完成收尾,避免新任务与旧进程重叠。 - 系统同时识别 RFC 3339 和现有证书中常见的 OpenSSL UTC 到期时间;无法解析的到期时间会写入警告并跳过,不会误判为无需续期。
- 每轮完成后会重新对账证书库与网关部署。某项续期失败不会阻止之后的定时扫描,之前可用的证书和 SSL 配置按上一节的恢复规则保留。
- 自动续期失败或被停止后,默认进入 6 小时重试退避,避免每次扫描立即重复调用 DNS API 和 CA;修改该申请项后允许下一轮重新尝试。
页面没有单独的“下次扫描时间”开关;判断是否成功应查看申请项的最近任务状态、证书到期时间和日志,而不是反复点击手动申请。
Windows 原生版:DNS-01 证书
Windows x86_64 版在 SSL / HTTPS → DNS-01 证书 中申请证书。安装包内置证书客户端,不需要初始化或下载 ACME.sh;该路径固定使用 Let's Encrypt,只接受 DNS-01 验证,不提供 HTTP-01 或其他证书颁发机构的切换。
需要在页面中选择受支持的 DNS 服务商,并以最小权限保存其 API 凭据。当前支持阿里云 DNS、Baidu Cloud DNS、Cloudflare、DNSPod、腾讯云 DNSPod、DuckDNS、Dynu、dynv6、GoDaddy、华为云 DNS 和 Porkbun。Cloudflare 支持 API Token 或 Global API Key 两套凭据,应优先使用限定 Zone 的 Token。
新申请项默认开启自动续期;签发成功会进入证书库。单活动证书模式下,首次签发后仍需手动将它设为当前证书。Windows 页面不要求初始化 acme.sh,也不提供 CA 切换。
飞牛 SSL 证书库同步(仅原生 FPK)
原生飞牛 FPK 可在 系统设置 → 飞牛 → 飞牛 SSL 证书库同步 中,将 fn-knock 证书库的内容同步到飞牛系统已有的证书记录。
同步只会更新域名和 SAN 集合完全匹配的现有飞牛证书;不会新建或删除飞牛系统中的证书记录。因此,先在两侧确认覆盖的域名集合一致,再执行单项或全部同步。若没有匹配项,先调整证书记录,而不是期待同步功能代为创建。
可按需手动同步,也可开启自动同步。自动模式会在本地证书库变更后短暂合并等待,再集中同步匹配项并刷新一次飞牛服务。若目标证书同时启用了飞牛自己的自动续期,后续续期可能覆盖同步结果,应明确由哪一侧负责续期。
推荐配置顺序
- 确定最终对外域名和端口,不要先用内网地址申请证书。
- 在 DNS 中确认认证 Host 和业务 Host 的解析已生效。
- 在
SSL / HTTPS上传、申请或选择证书。 - 根据证书数量选择单活动证书或多证书 SNI,并确认网关已收到预期证书集。
- 查看证书覆盖提示,修复未覆盖的 Host。
- 从移动网络访问认证 Host 和一个业务 Host,检查浏览器证书链、域名、有效期与登录流程。
自动 HTTPS 的边界
系统中的自动 HTTPS 只涉及网关侧的 HTTP 到 HTTPS 跳转和已配置证书的启用,不会替你申请域名、打开路由器端口或配置 CDN 回源。Docker 和 OpenWrt 环境不提供这一宿主机相关开关;由外层反代终止 TLS 时,应由外层负责强制 HTTPS。Windows 上即使显示该开关,也必须先有真实的入站链路和可用的 80 端口;7999 默认监听全部接口不等于 Windows 防火墙、路由器/NAT 或运营商已经允许公网访问。
排查
浏览器提示域名不匹配:证书的 DNS 名称没有覆盖当前 Host,或上游 CDN 回源到了错误站点。
证书库里存在但外网仍返回旧证书:检查它是否被设为当前 / 默认证书、部署方式是否正确,以及网关已接收证书集是否更新。
多个域名返回同一张错误证书:检查当前是否仍为单活动模式,或多证书 SNI 中没有匹配项而回退到默认项。
上传失败:确认 PEM 内容、私钥配对和证书链顺序,不要上传 PKCS#12 文件内容到 PEM 文本框。
ACME 失败:检查 DNS provider 凭据、DNS API 限流和 TXT 记录传播。当前申请流程只使用 DNS-01,不要改用 HTTP-01 方向排查。
ACME 签发成功但未生效:检查证书库关联,以及单活动模式下是否执行了
设为当前证书。Cloudflared 使用
https://localhost:7999失败:该上游 TLS 名称和证书必须匹配;无法匹配时先使用经过验证的 HTTP 回源方案,或调整 Tunnel 的 TLS 设置。业务页正常、Passkey 不可用:检查认证 Host 是否以有效 HTTPS 和正确 RP 域名访问。
