
GitHub CLI 如何用 gh attestation trustedroot 配置可信根以离线验证制品证明【免费下载链接】cliGitHub’s official command line tool项目地址: https://gitcode.com/GitHub_Trending/cli/cli在离线或隔离环境中使用 GitHub CLI 的gh attestation验证制品证明时机器无法在线获取 TUF 可信根元数据。gh attestation verify默认在线自动完成这一步离线验证则必须提前提供trusted_root.jsonl文件通过--custom-trusted-root标志传给 verify 命令。gh attestation trusted-root就是用来生成这个文件的它在联网机器上从 TUF 仓库拉取并校验可信根输出trusted_root.jsonl的内容供后续离线验证使用。完整流程在联网机器上生成trusted_root.jsonl、下载制品的 attestation bundle两者一起带到离线机器再执行离线 verify。前提认证与宿主支持trusted root 命令属于attestation子命令族别名at子命令注册见 attestation.go。默认不传--hostname时使用配置的默认宿主且该宿主必须是受支持的宿主auth.IsHostSupported会校验实现见 trustedroot.go。针对 GitHub Enterprise Server 实例时通过--hostname指定对 GHE 实例执行trusted-root需要已持有该宿主的有效 token否则会报not authenticated with hostname见 trustedroot_test.go 中的对应用例。生成 trusted_root.jsonl在联网机器上执行不带任何标志时命令会同时获取 Sigstore Public Good Instance 与 GitHub 自有 Sigstore 实例两个来源的可信根输出为压缩 JSONgh attestation trusted-root trusted_root.jsonl输出内容随后通过--custom-trusted-root trusted_root.jsonl传给 verify 命令。如果你们自建了 TUF 仓库镜像需要改用自定义镜像此时--tuf-url与--tuf-root必须成对出现MarkFlagsRequiredTogether只传其一命令直接报错--tuf-url自定义 TUF 仓库镜像的 URL--tuf-root你通过带外方式安全获得的本地root.json文件路径命令会读取该文件作为 TUF 信任根。gh attestation trusted-root --tuf-url tuf-mirror-url --tuf-root path-to-root.json trusted_root.jsonl上面两个尖括号占位符分别替换为你的镜像地址和本地 root.json 路径。可选如果只是想校验本地 TUF 仓库的完整性而不需要输出 trusted_root.jsonl 内容加--verify-only成功后输出类似Local TUF repository for repository-base-url updated and verified文档示例repository-base-url为实际仓库基础 URL。下载制品的证明 bundle离线验证还需要制品的 attestation bundle 落在本地磁盘。在联网机器上用gh attestation download完成该功能处于公开预览行为可能变化gh attestation download artifact-path --repo owner/repo--repo与--owner二选一且必填且值必须与制品实际关联的仓库/组织一致。相关 bundle 会写入当前目录文件名以制品摘要命名摘要为sha256:1234时文件名为sha256:1234.jsonlWindows 文件名不允许冒号会写成sha256-1234.jsonl。成功时输出Wrote attestations to file path. Any previous content has been overwritten注意重复执行同一摘要的下载会覆盖既有文件内容。完成后将trusted_root.jsonl与 bundle 文件如sha256:1234.jsonl一起转移到离线机器。在离线机器上执行验证gh attestation verify支持从磁盘读取 bundle--bundle标志接受“单个 bundle 的 JSON 文件”或“含多个 bundle 的 JSON lines 文件”。离线验证时组合两个本地文件gh attestation verify artifact-path --owner org \ --bundle bundle-file.jsonl \ --custom-trusted-root trusted_root.jsonl三个尖括号占位符分别是离线机器上的制品路径、制品关联的组织名与--repo二选一互斥、下载得到的 bundle 文件名。成功时输出✓ Verification succeeded!并列出每条匹配策略的 attestationbuild repo、build workflow、signer repo、signer workflow。加--format json时改为输出 JSON 数组每个对象含attestation被验证的 bundle与verificationResult解析后的 bundle 内容可用于后续策略引擎其中只有signature.certificate与verifiedTimestamps是工作流无法伪造的字段statement.predicate内容可被工作流上下文篡改做策略校验时需留意详见 verify 命令说明verify.go。失败现象与限制命令在拉取可信根时若 TUF 仓库校验失败报错形如Failed to verify the TUF repository: 原因--tuf-root指向的文件不存在或不可读时为failed to read root file path。--tuf-url与--tuf-root必须同时提供只传--tuf-url命令报错。gh attestation download处于公开预览后续可能变化。trusted root 是信任根资料建议按内部信任资料流程保管与分发TUF 仓库元数据会更新离线环境使用一段时间后应重新生成trusted_root.jsonl。命令的完整实现可对照 trustedroot.go 与 verify.go 阅读。【免费下载链接】cliGitHub’s official command line tool项目地址: https://gitcode.com/GitHub_Trending/cli/cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考