验证你下载的内容
控制平面(control plane)是一款安全产品,因此你拿到一个发布后首先应做的,就是 证明它确实是项目所发布的那一个。Olivares AI 的发布会随附你做加密验证所需的一切:对校验和的签名、一份 SLSA 来源证明、一份 SBOM(SPDX + CycloneDX),以及一份 OpenVEX 证明 — 全部 按 digest 引用,绝不按标签。
一个发布随附哪些内容
Section titled “一个发布随附哪些内容”| 产物 | 它是什么 |
|---|---|
checksums.txt(+ .sig、.pem) | 每个产物的 SHA-256,附带 cosign 签名和证书 |
*_<os>_<arch>.tar.gz | 发布归档文件 |
*.sbom.sigstore.json | 作为已签名 in-toto 证明的 SBOM(SPDX) |
*.vex.sigstore.json | 作为已签名 in-toto 证明的 OpenVEX |
*.intoto.jsonl | SLSA Build L3 来源证明 |
| 容器镜像 + Helm chart | 发布时发布到 registry,按 digest 固定 |
仓库提供了 scripts/verify-release.sh,它会运行完整链条:验证对 checksums.txt 的签名,重新计算每个产物的 SHA-256,然后验证 SBOM、OpenVEX 和 SLSA 证明。
# Default: keyless (Sigstore). Needs network access to the transparency log (Rekor).scripts/verify-release.sh
# Key-based (air-gap friendly): verify against the project's public key.scripts/verify-release.sh --key cosign.pub
# Fully offline: no Rekor / no transparency-log network at all.scripts/verify-release.sh --key cosign.pub --offline
# Pin the SLSA provenance to a specific source tag.scripts/verify-release.sh --source-tag v26.8.0使用 --offline(或在提供了密钥时)脚本会向每次 cosign 调用添加
--insecure-ignore-tlog,因此不会使用任何 Sigstore/Rekor 网络 — 这就是面向断网环境的路径。
它逐步检查什么
Section titled “它逐步检查什么”如果你更愿意自己运行这些检查,脚本所做的就是:
-
对校验和的签名 — 无密钥,对照项目的 GitHub Actions 身份和 OIDC issuer 进行验证:
Terminal window cosign verify-blob \--certificate checksums.txt.pem \--signature checksums.txt.sig \--certificate-identity-regexp '^https://github\.com/olivaresai/olivares/\.github/workflows/release\.yml@refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$' \--certificate-oidc-issuer https://token.actions.githubusercontent.com \checksums.txt -
产物完整性 — 每个下载的产物都必须与
checksums.txt匹配:Terminal window sha256sum --check checksums.txt -
SBOM(SPDX)证明:
Terminal window cosign verify-blob-attestation --type spdxjson \--bundle <artifact>.sbom.sigstore.json --new-bundle-format \--check-claims <artifact> -
OpenVEX 证明(项目基于可达性的漏洞声明):
Terminal window cosign verify-blob-attestation --type openvex \--bundle <artifact>.vex.sigstore.json --new-bundle-format \--check-claims <artifact> -
SLSA 来源证明:
Terminal window slsa-verifier verify-artifact <artifact> \--provenance-path <artifact>.intoto.jsonl \--source-uri github.com/olivaresai/olivares
验证容器镜像
Section titled “验证容器镜像”对于已发布的镜像,解析其 digest 并对照 GitHub Actions 身份进行验证(此路径无密钥且需要网络):
IMAGE=docker.io/olivaresai/olivaresDIGEST="$(crane digest "$IMAGE:<version>")"REF="$IMAGE@$DIGEST"
cosign verify "$REF" \ --certificate-identity-regexp '^https://github\.com/olivaresai/olivares/\.github/workflows/release\.yml@refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$' \ --certificate-oidc-issuer https://token.actions.githubusercontent.comcosign verify-attestation "$REF" --type spdxjson \ --certificate-identity-regexp '^https://github\.com/olivaresai/olivares/\.github/workflows/release\.yml@refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$' \ --certificate-oidc-issuer https://token.actions.githubusercontent.comcosign verify-attestation "$REF" --type openvex \ --certificate-identity-regexp '^https://github\.com/olivaresai/olivares/\.github/workflows/release\.yml@refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$' \ --certificate-oidc-issuer https://token.actions.githubusercontent.comslsa-verifier verify-image "$REF" \ --source-uri github.com/olivaresai/olivares --source-tag <version>始终 按 digest 部署镜像(@sha256:…),绝不按可变标签。
在气隙环境中
Section titled “在气隙环境中”如果你完全无法访问网络,请使用 气隙 bundle,它携带一个公钥并完全离线(无 Rekor)地验证一切。参阅 在气隙环境中安装。