Skip to content

SSL 证书

为什么这个页面很重要

只要你准备从公网访问 fknock,就应该尽早规划 HTTPS。

原因很现实:

  • 浏览器不会一直提示“不安全”
  • TOTP 与 Passkey 的体验更稳定
  • FRP / 域名 / Cloudflared 场景更容易排错

fknock 已经支持同一入口端口动态启用 HTTPS。配置好证书后,明文 HTTP 请求会被重定向到 HTTPS。

另外,非 Docker 部署现在还可以在:

  • 系统设置 → 功能 → 自动HTTPS

开启 80 → HTTPS 的自动跳转。它适合已经把 Go 网关端口改成 443、并且 80 / 443 没有被运营商或系统占用的场景。

fknock 支持的 3 种证书方案

方案一:上传已有证书

适合:

  • 你已经有正式证书与私钥
  • 团队或公司有统一证书管理方式

路径:SSL 证书 → 证书配置

你可以:

  1. 直接粘贴证书与私钥内容
  2. 从当前设备上传证书与私钥文件
  3. 如果文件已经放在飞牛的 应用数据 → fn-knock 目录下,也可以用 从飞牛中选择 直接读取
  4. 保存证书
  5. 查看证书信息

补充说明:

  • 证书文件通常使用 .crt.pem
  • 私钥文件通常使用 .key.pem
  • 从飞牛中选择 更适合在手机、平板上操作,不需要先把文件下载到本地
  • 系统会扫描 fn-knock 根目录及三层以内的文件,所以建议把证书和私钥放在容易找到的位置

页面会展示:

  • 发行者
  • 使用者
  • 有效期
  • 域名列表
  • 序列号

方案二:自签证书

适合:

  • 主要在内网使用
  • 想先把 HTTPS 跑起来
  • 当前还没有正式域名和正式证书

路径:SSL 证书 → 自签证书

主要流程:

  1. 先生成根证书
  2. 添加域名或 IP
  3. 一键部署或下载服务器证书

需要注意:

  • 根证书是你自己签发服务器证书的基础
  • 如果你想让浏览器真正信任,需要把根证书导入自己的系统或浏览器信任链

方案三:ACME 自动申请

适合:

  • 你有正式域名
  • 想自动化申请和续期
  • 希望长期使用正式 HTTPS

路径:SSL 证书 → ACME 证书

在开始申请前,通常要先去:

  • 系统设置 → ACME

acme.sh 安装好。

最近这里还多了一个和长期使用强相关的选项:

  • 可以在 系统设置 → ACME 里切换默认 CA,例如 Let's EncryptZeroSSL

需要注意:

  • 这个切换只影响后续新的签发和自动续期
  • 不会立刻替换当前已经部署的证书

ACME 证书的基本流程

  1. 准备域名
  2. 选择 DNS 服务商
  3. 填写 DNS API 凭据
  4. 保存配置
  5. 申请证书
  6. 观察任务日志
  7. 成功后下载或一键部署

ACME 页面不仅会显示实时日志,还会对常见失败原因做分析,例如:

  • DNS 凭据错误
  • 邮箱或参数问题
  • DNS API 频率限制
  • 证书申请频率限制

另外,最近这一块还有两个对日常使用很重要的变化:

  1. 申请成功后的 ACME 证书会自动加入证书库
  2. 如果你需要立即启用它,可以直接点击 设为当前证书

也就是说,现在的 ACME 流程已经更接近:

  • 申请
  • 入库
  • 设为当前证书

这一条完整闭环。

删除 ACME 申请项会发生什么

最近 ACME 列表除了“删除证书”,还支持直接:

  • 删除申请项

这两个动作不要混为一谈。

删除证书

更偏向:

  • 清理当前这次已签发证书
  • 保留申请项本身,后面仍可继续重申请

删除申请项

更偏向:

  • 连申请记录一起删掉
  • 不再保留这条域名的自动续期入口

如果这条申请项已经:

  • 产出过证书
  • 并加入了证书库

那么删除申请项时,还会一并清理:

  • 已签发证书文件
  • 证书库里的对应条目
  • 这条申请项相关的库关联

所以如果你只是想:

  • 重新签发
  • 更新证书库
  • 切换当前启用证书

通常更稳妥的做法仍然是:

  • 重申请
  • 更新到证书库
  • 设为当前证书

只有在你确认这条域名后面不再继续自动续期时,才更适合删除申请项本身。

清空证书库会发生什么

路径:SSL 证书 → 证书配置

当前页面已经支持直接:

  • 清空证书库

这个动作不是只删“历史候选证书”,而是会同时:

  • 删除证书库里的全部证书
  • 同步清空 Go 网关当前已下发的证书
  • 一并停用 HTTPS

所以它更适合下面这些场景:

  • 你确认这台机器上的证书已经全都失效
  • 你准备完全重建证书配置
  • 你想先清空旧库,再重新导入一套新的证书

如果你只是想切换当前使用的证书,通常更稳妥的做法仍然是:

  • 直接 设为当前证书

子域模式下应该怎么理解证书申请

如果你准备走:

  • auth.example.com
  • alist.example.com
  • nav.example.com

这类子域模式路线,那么最常见的申请对象就是:

  • *.example.com

这能覆盖同一父域下的大多数业务子域和鉴权子域。

如果你还需要根域:

  • example.com

本身也参与访问,那么还应把它额外一起加入证书申请列表。

后台还会根据你当前的子域模式配置,分析:

  • 当前证书是否覆盖了鉴权服务
  • 是否覆盖了所有已配置 Host 映射
  • 证书库里有没有更合适的候选证书

在一些场景里,还会自动切换到更适合当前子域模式的证书。

三种方案怎么选

如果你只想快速判断,按这个顺序即可:

  1. 已有正式证书:直接上传
  2. 内网或测试:自签证书
  3. 有正式域名并长期使用:ACME

哪些场景尤其建议尽早启用 HTTPS

FRP 反代场景

如果你用 FRP 把公网流量直接转到 fknock 的 7999,外部很可能就是以 https://你的公网地址:远端端口 访问,所以最好先把 7999 本身的 HTTPS 准备好。

子域模式场景

如果你准备长期使用:

  • auth.example.com
  • alist.example.com
  • jellyfin.example.com

那么 HTTPS 基本不是可选项,而是主线路线的一部分。

否则你会同时遇到:

  • 子域访问不稳定
  • Passkey 体验变差
  • 多业务子域下难以区分到底是解析问题还是证书问题

如果你希望最终用户直接访问:

  • https://auth.example.com
  • https://fnos.example.com

而不是显式带 :7999,通常还需要再配合:

  • EdgeOne / ESA 等前置平台
  • 或把 Go 网关端口改为 443,再开启 自动HTTPS 处理 80HTTPS 的跳转

Passkey 场景

Passkey 在 HTTPS 环境下更稳定,也更符合现代浏览器的预期。

Cloudflared 回源为 HTTPS 的场景

如果你希望 Cloudflared 在回源时使用 https://localhost:7999,那么 fknock 本身就必须先启用 HTTPS。

常见问题

证书保存失败

通常优先检查:

  1. 证书和私钥是否匹配
  2. PEM 内容是否完整
  3. 是否有多余空格或截断

ACME 一直失败

优先检查:

  1. 域名解析是否正确
  2. DNS 服务商是否选对
  3. 凭据是否有权限
  4. 是否触发频率限制

自动 HTTPS 启动失败

如果在 系统设置 → 功能 里开启 自动HTTPS 后提示失败,优先检查:

  1. 当前是否是 Docker 部署
  2. 80 端口是否已经被其他程序占用
  3. 当前运行权限是否允许监听 80
  4. 飞牛系统自己的 80 / 443 重定向是否仍然开启
  5. Go 网关端口是否已经按你的目标改成 443

这项功能只负责把 HTTP 跳到 HTTPS,不负责替你申请证书。证书仍然需要先通过上传、自签或 ACME 准备好。

我已经开了 HTTPS,为什么 Cloudflared 仍然连不上

如果你在 Cloudflared 公网端把服务配置成 https://localhost:7999,还要确认:

  • 当前证书是否能被 cloudflared 信任
  • 是否需要在 Origin Request 中关闭 TLS 验证,或指定正确的 Origin Server Name

详细说明见:

相关阅读

QQ群:1081609274