如何使用 Sigstore 为你的 Python .exe 签名(无需证书)
Source: Dev.to
请提供您希望翻译的正文内容,我将按照要求保留源链接并进行简体中文翻译。
问题
您构建了一个开源应用。用户下载您的 .exe。他们如何确认它真的来自您且未被篡改?
- 传统方案:购买代码签名证书($200‑$400 / 年)。
- 更佳方案:Sigstore – 免费、开源、密码学安全。
这就是我为每个 PC_Workman 发行版签名的方式。
- 设置时间:约 8 分钟
- 每次发布耗时:约 30 秒
- 成本:$0
为什么选择 Sigstore?
| ✅ | Sigstore 为您提供的内容 |
|---|---|
| ✅ | 证明文件来自 您的 GitHub 账户 |
| ✅ | 证明文件自签名后 未被修改 |
| ✅ | 加密证明 任何人都可以验证 |
| ✅ | 完全 免费 – 无需信用卡、无需购买证书、无年度费用 |
您需要的
| 需求 | 详情 |
|---|---|
| 已编译为 .exe 的 Python 项目 | PyInstaller、Nuitka 等 |
| GitHub 账户 | 用于身份验证并声明所有权 |
| 8 分钟 | 用于完成所有设置 |
安装 Sigstore
pip install sigstore
验证安装:
sigstore --version
# 预期输出: sigstore, version X.X.X
创建 GitHub 个人访问令牌 (PAT)
-
前往 GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)。
-
点击 “Generate new token (classic)”。
-
选择以下作用域:
read:useruser:email
-
将 Expiration 设置为 “No expiration”(用于持续发布)。
-
复制 令牌(只能看到一次)。
安全保存,例如:
# Bash / macOS / Linux
export GITHUB_TOKEN="your_token_here"
# PowerShell
$env:GITHUB_TOKEN="your_token_here"
也可以将其保存在密码管理器中,需要时粘贴使用。
为您的可执行文件签名
cd /path/to/your/releases # navigate to the folder containing the .exe
sigstore sign \
--bundle sigstore-bundle.json \
PC_Workman_HCK.exe
会发生什么
-
Sigstore 会打开浏览器进行 GitHub OAuth —— 授权该应用。
-
生成加密签名。
-
会出现两个文件:
PC_Workman_HCK.exe(保持不变)sigstore-bundle.json(签名捆绑文件)
时间:约30 秒。
创建 GitHub Release
包括以下资产:
| 文件 | 用途 |
|---|---|
PC_Workman_HCK.exe | 可执行文件 |
sigstore-bundle.json | 签名证明 |
VERIFICATION.md | 给用户的说明(见下文) |
(可选) security-report.txt | VirusTotal 扫描结果等 |
示例 VERIFICATION.md
# How to Verify This Release
```bash
pip install sigstore
sigstore verify github PC_Workman_HCK.exe \
--bundle sigstore-bundle.json \
--cert-identity https://github.com/YourUsername
If verification succeeds you’ll see:
✅ File came from @YourUsername GitHub account
✅ File hasn't been modified since signing
✅ Signing happened on <timestamp>
If it fails, the command will exit with an error and show why.
将 `YourUsername` 替换为您实际的 GitHub 用户名。
## 作为用户进行验证
```bash
pip install sigstore
sigstore verify github PC_Workman_HCK.exe \
--bundle sigstore-bundle.json \
--cert-identity https://github.com/YourUsername
Sigstore 检查:
- 证书身份 – 签名是否匹配声明的 GitHub 账户?
- 完整性 – 文件自签名后是否被篡改?
- 时间戳 – 签名时间是什么时候?
不需要信任链 —— 纯密码学。
使用 GitHub Actions 自动化
name: Sign Release
on:
push:
tags:
- 'v*' # run on version tags
jobs:
sign:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Sigstore
run: pip install sigstore
- name: Build executable
run: pyinstaller main.py # or your build command
- name: Sign executable
run: |
sigstore sign \
--bundle sigstore-bundle.json \
dist/your-app.exe
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload signed assets
uses: actions/upload-artifact@v3
with:
name: signed-release
path: |
dist/your-app.exe
sigstore-bundle.json
每个带标签的发布都将自动签名并上传制品。
构建信任网络(可选附加项)
| 服务 | 它的作用 |
|---|---|
ORCID (orcid.org) | 为研究人员/开发者提供持久的数字身份;链接到 GitHub 个人资料。 |
GitHub Developer Program (github.com/developer) | 展示对开源的承诺;免费会员资格。 |
OpenSSF Best Practices Badge (bestpractices.coreinfrastructure.org) | 超过 60 项安全标准;业界认可的徽章。 |
它们共同为您的项目构建更强大的信任网络。
快速 5 分钟挑战
# 1️⃣ Install Sigstore
pip install sigstore
# 2️⃣ Create a test file
echo "test" > test.txt
# 3️⃣ Sign it
sigstore sign --bundle test-bundle.json test.txt
# 4️⃣ Verify it
sigstore verify github test.txt \
--bundle test-bundle.json \
--cert-identity https://github.com/YourUsername
您刚刚对第一个文件进行了加密签名——现在将相同的步骤应用到您的正式发布中。
进一步阅读
- 官方 Sigstore 文档 –
- GitHub + Sigstore 集成指南 –
- PC_Workman 发布(示例) –
Frequently Asked Questions
| 问题 | 答案 |
|---|---|
| What if my token is missing scopes? | Ensure it has read:user and user:email. |
| What if the bundle filename doesn’t match the uploaded file? | Use the exact --bundle name you upload (e.g., sigstore-bundle.json). |
What should --cert-identity look like? | Use the full URL: https://github.com/YourUsername. |
| I’m getting “module not found” errors. | Activate the Python environment where you installed Sigstore, or install it globally (pip install --user sigstore). |
TL;DR
- Setup:
pip install sigstore+ GitHub PAT(read:user,user:email)。 - Sign:
sigstore sign --bundle sigstore-bundle.json your-app.exe。 - Release: 上传两个文件并附上简短的验证指南。
- Verify: 用户运行
sigstore verify github …– 无需盲目信任。
免费、快速,让你的用户确信可执行文件确实来自你。 🎉
扫描与 CodeQL 分析
(在 Dev.to 发布时的链接)
第 2 部分:Sigstore 签名
(本文)
第 3 部分:OpenSSF 最佳实践徽章
(即将推出)
关于我
我叫 Marcin,是一名独立开发者,正在构建 PC_Workman —— 一个开源的系统监控工具。
- 在荷兰的仓库轮班期间,使用一台即将报废的 2014 年笔记本电脑开发。
- 超过 700 小时,完成了 4 次完整重构,最终发布。
- 记录所有过程并每周发布。
关注我的公开开发之旅:
- GitHub:
@HuckleR2003 - Twitter: —
- Everything about me: —
标签
#sigstore #python #security #opensource #buildinpublic