简介
工件证明是为构建的软件创建不可伪造的来源和完整性保证的好方法。
默认情况下,证明存储在 GitHub 的证明 API 中,当您验证证明时,gh attestation verify
将查询该 API。该命令还将联系 GitHub 的服务器以检查用于验证证明的更新密钥材料。
此命令可以在没有互联网连接的情况下工作,但您需要手动提供证明捆绑包和受信任根证书中的密钥材料。
在开始本指南之前,您应该正在构建并生成工件证明。请参阅“使用工件证明为构建建立来源”。
步骤 1:下载证明捆绑包
首先,从证明 API 获取证明捆绑包。
您可以使用以下命令从联机的计算机执行此操作
gh attestation download PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME
gh attestation download PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME
以下是该命令的示例输出
Wrote attestations to file sha256:ae57936def59bc4c75edd3a837d89bcefc6d3a5e31d55a6fa7a71624f92c3c3b.jsonl.
Any previous content has been overwritten
The trusted metadata is now available at sha256:ae57936def59bc4c75edd3a837d89bcefc6d3a5e31d55a6fa7a71624f92c3c3b.jsonl
步骤 2:下载受信任根证书
接下来,从受信任根获取密钥材料。
工件证明对于公共存储库使用 Sigstore 公共实例,对于私有存储库使用 GitHub 的 Sigstore 实例。您可以使用一个命令获取这两个受信任根。
gh attestation trusted-root > trusted_root.jsonl
gh attestation trusted-root > trusted_root.jsonl
在脱机环境中更新受信任根信息
最佳实践是在每次将新的签名材料导入脱机环境时生成一个新的 trusted_root.jsonl
文件。
trusted_root.jsonl
中的密钥材料没有内置的过期日期,因此在您生成受信任根文件之前签名的任何内容都将继续成功验证。在生成文件后签名的任何内容都将验证,直到该 Sigstore 实例轮换其密钥材料,这通常每年发生几次。您将不知道自上次生成受信任根文件以来密钥材料是否已被吊销。
步骤 3:执行脱机验证
现在,您已准备好离线验证工件。
您应该导入到您的脱机环境中
- GitHub CLI
- 您的工件
- 捆绑文件
- 受信任根文件
然后,您可以使用以下命令执行脱机验证
gh attestation verify PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME --bundle sha256:ae57936def59bc4c75edd3a837d89bcefc6d3a5e31d55a6fa7a71624f92c3c3b.jsonl --custom-trusted-root trusted_root.jsonl
gh attestation verify PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME --bundle sha256:ae57936def59bc4c75edd3a837d89bcefc6d3a5e31d55a6fa7a71624f92c3c3b.jsonl --custom-trusted-root trusted_root.jsonl
结论
您现在正在脱机环境中验证工件证明。我们建议在将新的签名工件引入脱机环境时导入新的受信任根。