Sigstore Python 1.0 稳定版发布
Sigstore 宣布了基于 Python 的 Sigstore 兼容客户端 sigstore-python 的 1.0 稳定版发布。该客户端提供了一个命令行界面(CLI)和可导入的 Python API,能够使用任何 Sigstore 支持的身份进行签名和验证,并在支持的环境中自动检测身份。
Sigstore 简介
Sigstore 为开源软件的签名、验证和保护提供了一个标准。它支持一种称为“无密钥签名”的流程,Sigstore 生成临时签名证书,而无需维护私钥。在生成证书时,Sigstore 会编码来自 OIDC 令牌的信息,包括仓库路径、构建的具体提交以及包含构建指令的文件的链接。
项目目标
根据项目负责人 William Woodruff 的介绍,sigstore-python 有两个主要目标:易用性和参考质量。Woodruff 表示,sigstore-python 应提供一个极其直观的 CLI 和 API,并实现 100% 的文档覆盖率,同时提供实用的示例。尽管其他 Sigstore 客户端(如 Go、Ruby、Java 和 Rust)也在开发中,但团队希望 sigstore-python 在简洁且正确地实现 Sigstore 安全模型方面成为最具权威的客户端之一。
易用性设计
为了实现易用性目标,客户端隐藏了许多复杂的加密细节,仅提供了两个主要功能:签名和验证。例如,可以通过 CLI 使用 sigstore sign 命令进行签名:
$ echo "hello, i'm signing this!" > hello.txt
$ sigstore sign hello.txt在桌面环境中,这将触发 OAuth2 工作流以进行身份验证。在支持的 CI 平台(如 GitHub Actions、Google Compute Engine 和 Google Cloud Build)上,客户端会自动选择 OpenID Connect 身份。未来计划增加对 GitLab CI 和 CircleCI 的支持。
Python API 示例
通过可导入的 Python API,可以在 Python 中执行与 CLI 相同的任务。例如,使用 Python API 进行签名的代码如下:
import io
from sigstore.sign import Signer
from sigstore.oidc import Issuer
contents = io.BytesIO(b"hello, i'm signing this!")
issuer = Issuer.production()
token = issuer.identity_token()
signer = Signer.production()
result = signer.sign(input_=contents, identity_token=token)
print(result)GitHub Action 集成
可以通过在 GitHub Actions 工作流中添加 sigstore/gh-action-sigstore-python 来启用 Sigstore Python 的 GitHub Action。工作流需要具有请求 OIDC 令牌的权限,这可以通过在作业或工作流中设置 id-token: write 来实现:
jobs:
selftest:
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- uses: actions/checkout@v3
- name: install
run: python -m pip install .
- uses: sigstore/gh-action-sigstore-python@v1.0.0
with:
inputs: file.txt未来计划
Woodruff 表示,项目将对 Python API 和 CLI 采用语义版本控制,重大变更将伴随主版本号的提升。未来的版本将进一步集成到 PyPI 和客户端打包工具链中,并稳定其 GitHub Action。
开源与许可
sigstore-python 是开源的,采用 Apache 2.0 许可证。更多详细信息可以在 API 文档 或 Sigstore Slack 的 #python 频道中找到。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。