简介
项目证明是为自己构建的软件创建不可伪造的来源和完整性保证的极佳方式。
默认情况下,证明存储在 GitHub 的证明 API 中,gh attestation verify
会在你前往验证证明时对其进行查询。 该命令还将联系 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 Public Good 实例用于公共存储库,将 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
结束语
现在,你正在离线环境中验证项目证明。 建议每当将新的已签名项目引入离线环境时,都导入新的受信任根。