Skip to content

插件安装信任

ZBoard 在接受签名身份前校验安装包。包可通过 signature.json.public_key 附带 Ed25519 公钥;这能证明签名、清单和文件摘要匹配,本身不能证明发布者身份。

离线导入

管理员选包后先查看名称、发布者、所需能力、页面范围和兼容性,再确认安装。未知来源还需明确确认签名密钥指纹;确认请求同时绑定整个安装包的 SHA-256 与已验证公钥的指纹。预览不安装文件、不启动进程、不写入信任。

公钥及插件独立信任与安装结果在同一事务中保存,安装失败不授予信任。后续版本必须保持插件 ID、发布者及密钥一致,信任不会扩散到其他插件。卸载后随安装历史保留身份约束,防止其他密钥接管同一插件 ID。换钥在独立审核流程具备前保持拒绝。

旧包未附带公钥时,可在弹窗兼容选项中提供公钥。原有配置文件的可信发布者继续有效;删除配置公钥仍会撤销基于该配置安装的插件信任。明确确认的插件独立信任保存在数据库中,重启后仍有效。

市场安装

未设置 plugins.catalog_url 时,市场读取 ZeroDeNet ZBoard 公开目录。插件详情页提供各平台安装包下载、在线安装和已安装插件的管理入口。发行信息来自已登记 GitHub 仓库的 releases/download/v<登记版本>/marketplace-entry.json;插件 ID、仓库、发布者和版本必须匹配目录,元数据必须包含安装包的平台、SHA-256、大小和发布者公钥。浏览器不能指定任意安装地址。

在线安装选择服务器对应平台(或通用 any 包),先下载并验证大小、摘要、身份、签名及兼容性,再使用与离线导入相同的确认弹窗。公开收录及发布者元数据不授予信任;未知密钥仍需明确确认指纹,信任仅限该插件。确认时重新下载、校验并绑定预览的安装包摘要,包发生变化必须重新预览。已有密钥约束、能力准入、迁移及启停规则继续由宿主保证。尚无发行包或不支持当前服务器平台时会明确说明。

宿主先验证配置目录的签名与有效期。已签名条目可通过 public_key 认证该插件的发布者密钥。保存信任前,宿主验证包摘要、签名、插件 ID、发布者及版本。条目公钥不会加入全局发布者配置,也不能用于签署新的市场目录。

plugins.catalog_url 必须指向宿主签名目录,不能直接使用源码市场的 JSON。目录签名者仍需作为宿主信任根配置。本次实现不发布生产目录,也不预设未经确认的官方市场密钥。

下载最多跟随四次重定向。每跳必须使用 HTTPS 443,并在连接前检查每次 DNS 解析结果,拒绝私网目的地址。重定向目标允许发行托管服务使用的临时签名查询参数,移除 Authorization 与 Cookie 请求头,最终仍强制验签及摘要核验。

打包及兼容性

pluginpackager -source <目录> -out <安装包.zbplugin> 自动在用户配置目录下生成并复用本地私钥。仍支持显式 -key-key-id,签署市场目录时必须指定它们。OAuth 构建脚本也默认生成并复用被 Git 忽略的开发密钥。

新版打包工具在签名信息中增加可选公钥字段,旧宿主严格解析签名时需要先升级才能读取新包。已有 Release 不覆盖、不改摘要,通过兼容输入支持旧包。

首次安装保持停用。核心能力准入、注册策略、账户归属、配置校验和数据迁移独立于发布者信任,继续由宿主执行。

插件准入依据宿主支持的插件协议、UI 桥、能力和运行平台,并受宿主授权及数据生命周期检查约束。ZBoard 的产品发行版本号(包括 dev、RC 后缀)不阻止安装、启用或运行中的升级。requires.zboard 为可选的参考声明,tested_zboard_versions 记录发布者测试覆盖。超出声明范围或无法识别宿主版本时只作提示,不拒绝操作,也不额外要求启用确认。既有签名插件包无需为此重新构建;不支持的接口、能力和运行平台仍会被拒绝。

ZeroDeNet