开发者平台

插件签名:cdnca-plugin

下载离线签名工具,生成发布者密钥、登记公钥并给 manifest 签名。

下载

离线命令行工具,单个可执行文件,无需安装。每个文件与 SHA256SUMS 都随平台发布包签名发布,下载后先核对哈希:

平台文件
Linux x86_64cdnca-plugin-linux-amd64
Linux ARM64cdnca-plugin-linux-arm64
macOS(Apple 芯片)cdnca-plugin-darwin-arm64
Windows x86_64cdnca-plugin-windows-amd64.exe

SHA256SUMS(全部文件的哈希)

下载并校验

curl -fsSLO 'https://developer.cdnca.com/downloads/cdnca-plugin/cdnca-plugin-linux-amd64'
curl -fsSLO 'https://developer.cdnca.com/downloads/cdnca-plugin/SHA256SUMS'
sha256sum -c --ignore-missing SHA256SUMS
chmod +x cdnca-plugin-linux-amd64 && mv cdnca-plugin-linux-amd64 cdnca-plugin

macOS 用 shasum(ARM64 Linux 把文件名换成 cdnca-plugin-linux-arm64):

curl -fsSLO 'https://developer.cdnca.com/downloads/cdnca-plugin/cdnca-plugin-darwin-arm64'
curl -fsSLO 'https://developer.cdnca.com/downloads/cdnca-plugin/SHA256SUMS'
shasum -a 256 -c --ignore-missing SHA256SUMS
chmod +x cdnca-plugin-darwin-arm64 && mv cdnca-plugin-darwin-arm64 cdnca-plugin

Windows(PowerShell):输出 True 表示哈希一致。

Invoke-WebRequest 'https://developer.cdnca.com/downloads/cdnca-plugin/cdnca-plugin-windows-amd64.exe' -OutFile cdnca-plugin.exe
Invoke-WebRequest 'https://developer.cdnca.com/downloads/cdnca-plugin/SHA256SUMS' -OutFile SHA256SUMS
(Get-FileHash cdnca-plugin.exe -Algorithm SHA256).Hash.ToLower() -eq ((Select-String 'cdnca-plugin-windows-amd64.exe' SHA256SUMS).Line -split '\s+')[0]

哈希不一致时不要运行,重新下载;仍不一致请联系平台。

使用

插件发布者用自己的 Ed25519 私钥做两件事:在卖家站“发布者公钥”页登记公钥时证明你持有私钥(签名平台给出的挑战);上传插件版本前给 manifest 签名(integrity 段)。签名规则与平台校验代码相同;私钥只在本机使用,工具不联网。

1. 生成密钥

./cdnca-plugin keygen -out publisher.key
  • 生成 publisher.key(权限 0600,内容是 base64url 编码的 32 字节 Ed25519 种子),已存在的文件不会被覆盖。
  • 标准输出打印公钥(base64url,32 字节),登记时填这个值;之后可用 ./cdnca-plugin pubkey -key publisher.key 再打印一次。
  • 私钥丢失后无法恢复,只能登记新公钥。请备份到受控位置,不要提交到代码仓库。

2. 登记公钥(卖家站 → 发布者公钥)

  1. 点“登记公钥”,填命名空间和第 1 步打印的公钥,点“获取待签名内容”。
  2. 复制页面显示的“待签名内容(base64url)”,在本机执行下面的命令。
  3. 把输出粘贴到“签名(base64url)”,点“提交登记”。挑战 15 分钟内有效,只能用一次。
./cdnca-plugin sign-challenge -key publisher.key -message '<待签名内容>'

工具会先确认这段内容是平台签发给这把公钥的挑战(cdnca-market-publisher-key-possession/v1 域,公钥和 key ID 一致),否则拒绝签名,这样私钥不会被拿去签别的东西。

3. 签名 manifest

./cdnca-plugin sign-manifest -key publisher.key -in manifest.json -out manifest.signed.json
  • metadata.publisher.id 必须是你登记过的命名空间;integrity.key_id 由工具按“命名空间 + 公钥”算出,必须是该命名空间下状态为 active 的公钥。
  • 工具覆盖原有 integrity 段,写入 algorithm=Ed25519、key_id、payload_sha256 和 signature;签名对象是去掉 integrity 后的规范化 manifest。
  • 签名后再改 manifest 的任何字段,签名都会失效,需要重新签名。
  • manifest 只允许对象、数组和字符串,出现数字或布尔值时工具会报错(与平台规则一致)。

上传版本时用 manifest.signed.json。

错误与退出码

出错时退出码为 1,并在标准错误输出原因(不会回显密钥内容);用法错误退出码为 2。