SSL 证书
为什么这个页面很重要
只要你准备从公网访问 fknock,就应该尽早规划 HTTPS。
原因很现实:
- 浏览器不会一直提示“不安全”
- TOTP 与 Passkey 的体验更稳定
- FRP / 域名 / Cloudflared 场景更容易排错
fknock 已经支持同一入口端口动态启用 HTTPS。配置好证书后,明文 HTTP 请求会被重定向到 HTTPS。
另外,非 Docker 部署现在还可以在:
系统设置 → 功能 → 自动HTTPS
开启 80 → HTTPS 的自动跳转。它适合已经把 Go 网关端口改成 443、并且 80 / 443 没有被运营商或系统占用的场景。
fknock 支持的 3 种证书方案
方案一:上传已有证书
适合:
- 你已经有正式证书与私钥
- 团队或公司有统一证书管理方式
路径:SSL 证书 → 证书配置
你可以:
- 直接粘贴证书与私钥内容
- 从当前设备上传证书与私钥文件
- 如果文件已经放在飞牛的
应用数据 → fn-knock目录下,也可以用从飞牛中选择直接读取 - 保存证书
- 查看证书信息
补充说明:
- 证书文件通常使用
.crt或.pem - 私钥文件通常使用
.key或.pem 从飞牛中选择更适合在手机、平板上操作,不需要先把文件下载到本地- 系统会扫描
fn-knock根目录及三层以内的文件,所以建议把证书和私钥放在容易找到的位置
页面会展示:
- 发行者
- 使用者
- 有效期
- 域名列表
- 序列号
方案二:自签证书
适合:
- 主要在内网使用
- 想先把 HTTPS 跑起来
- 当前还没有正式域名和正式证书
路径:SSL 证书 → 自签证书
主要流程:
- 先生成根证书
- 添加域名或 IP
- 一键部署或下载服务器证书
需要注意:
- 根证书是你自己签发服务器证书的基础
- 如果你想让浏览器真正信任,需要把根证书导入自己的系统或浏览器信任链
方案三:ACME 自动申请
适合:
- 你有正式域名
- 想自动化申请和续期
- 希望长期使用正式 HTTPS
路径:SSL 证书 → ACME 证书
在开始申请前,通常要先去:
系统设置 → ACME
把 acme.sh 安装好。
最近这里还多了一个和长期使用强相关的选项:
- 可以在
系统设置 → ACME里切换默认 CA,例如Let's Encrypt或ZeroSSL
需要注意:
- 这个切换只影响后续新的签发和自动续期
- 不会立刻替换当前已经部署的证书
ACME 证书的基本流程
- 准备域名
- 选择 DNS 服务商
- 填写 DNS API 凭据
- 保存配置
- 申请证书
- 观察任务日志
- 成功后下载或一键部署
ACME 页面不仅会显示实时日志,还会对常见失败原因做分析,例如:
- DNS 凭据错误
- 邮箱或参数问题
- DNS API 频率限制
- 证书申请频率限制
另外,最近这一块还有两个对日常使用很重要的变化:
- 申请成功后的 ACME 证书会自动加入证书库
- 如果你需要立即启用它,可以直接点击
设为当前证书
也就是说,现在的 ACME 流程已经更接近:
- 申请
- 入库
- 设为当前证书
这一条完整闭环。
删除 ACME 申请项会发生什么
最近 ACME 列表除了“删除证书”,还支持直接:
删除申请项
这两个动作不要混为一谈。
删除证书
更偏向:
- 清理当前这次已签发证书
- 保留申请项本身,后面仍可继续重申请
删除申请项
更偏向:
- 连申请记录一起删掉
- 不再保留这条域名的自动续期入口
如果这条申请项已经:
- 产出过证书
- 并加入了证书库
那么删除申请项时,还会一并清理:
- 已签发证书文件
- 证书库里的对应条目
- 这条申请项相关的库关联
所以如果你只是想:
- 重新签发
- 更新证书库
- 切换当前启用证书
通常更稳妥的做法仍然是:
重申请更新到证书库设为当前证书
只有在你确认这条域名后面不再继续自动续期时,才更适合删除申请项本身。
清空证书库会发生什么
路径:SSL 证书 → 证书配置
当前页面已经支持直接:
清空证书库
这个动作不是只删“历史候选证书”,而是会同时:
- 删除证书库里的全部证书
- 同步清空 Go 网关当前已下发的证书
- 一并停用 HTTPS
所以它更适合下面这些场景:
- 你确认这台机器上的证书已经全都失效
- 你准备完全重建证书配置
- 你想先清空旧库,再重新导入一套新的证书
如果你只是想切换当前使用的证书,通常更稳妥的做法仍然是:
- 直接
设为当前证书
子域模式下应该怎么理解证书申请
如果你准备走:
auth.example.comalist.example.comnav.example.com
这类子域模式路线,那么最常见的申请对象就是:
*.example.com
这能覆盖同一父域下的大多数业务子域和鉴权子域。
如果你还需要根域:
example.com
本身也参与访问,那么还应把它额外一起加入证书申请列表。
后台还会根据你当前的子域模式配置,分析:
- 当前证书是否覆盖了鉴权服务
- 是否覆盖了所有已配置 Host 映射
- 证书库里有没有更合适的候选证书
在一些场景里,还会自动切换到更适合当前子域模式的证书。
三种方案怎么选
如果你只想快速判断,按这个顺序即可:
- 已有正式证书:直接上传
- 内网或测试:自签证书
- 有正式域名并长期使用:ACME
哪些场景尤其建议尽早启用 HTTPS
FRP 反代场景
如果你用 FRP 把公网流量直接转到 fknock 的 7999,外部很可能就是以 https://你的公网地址:远端端口 访问,所以最好先把 7999 本身的 HTTPS 准备好。
子域模式场景
如果你准备长期使用:
auth.example.comalist.example.comjellyfin.example.com
那么 HTTPS 基本不是可选项,而是主线路线的一部分。
否则你会同时遇到:
- 子域访问不稳定
- Passkey 体验变差
- 多业务子域下难以区分到底是解析问题还是证书问题
如果你希望最终用户直接访问:
https://auth.example.comhttps://fnos.example.com
而不是显式带 :7999,通常还需要再配合:
- EdgeOne / ESA 等前置平台
- 或把 Go 网关端口改为
443,再开启自动HTTPS处理80到HTTPS的跳转
Passkey 场景
Passkey 在 HTTPS 环境下更稳定,也更符合现代浏览器的预期。
Cloudflared 回源为 HTTPS 的场景
如果你希望 Cloudflared 在回源时使用 https://localhost:7999,那么 fknock 本身就必须先启用 HTTPS。
常见问题
证书保存失败
通常优先检查:
- 证书和私钥是否匹配
- PEM 内容是否完整
- 是否有多余空格或截断
ACME 一直失败
优先检查:
- 域名解析是否正确
- DNS 服务商是否选对
- 凭据是否有权限
- 是否触发频率限制
自动 HTTPS 启动失败
如果在 系统设置 → 功能 里开启 自动HTTPS 后提示失败,优先检查:
- 当前是否是 Docker 部署
80端口是否已经被其他程序占用- 当前运行权限是否允许监听
80 - 飞牛系统自己的
80 / 443重定向是否仍然开启 - Go 网关端口是否已经按你的目标改成
443
这项功能只负责把 HTTP 跳到 HTTPS,不负责替你申请证书。证书仍然需要先通过上传、自签或 ACME 准备好。
我已经开了 HTTPS,为什么 Cloudflared 仍然连不上
如果你在 Cloudflared 公网端把服务配置成 https://localhost:7999,还要确认:
- 当前证书是否能被 cloudflared 信任
- 是否需要在 Origin Request 中关闭 TLS 验证,或指定正确的
Origin Server Name
详细说明见:
