如何使用 Sigstore 为你的 Python .exe 签名(无需证书)

发布: (2026年2月16日 GMT+8 03:48)
7 分钟阅读
原文: Dev.to

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)

  1. 前往 GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)

  2. 点击 “Generate new token (classic)”

  3. 选择以下作用域:

    • read:user
    • user:email
  4. Expiration 设置为 “No expiration”(用于持续发布)。

  5. 复制 令牌(只能看到一次)。

安全保存,例如:

# 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

会发生什么

  1. Sigstore 会打开浏览器进行 GitHub OAuth —— 授权该应用。

  2. 生成加密签名。

  3. 会出现两个文件:

    • PC_Workman_HCK.exe(保持不变)
    • sigstore-bundle.json(签名捆绑文件)

时间:约30 秒。

创建 GitHub Release

包括以下资产:

文件用途
PC_Workman_HCK.exe可执行文件
sigstore-bundle.json签名证明
VERIFICATION.md给用户的说明(见下文)
(可选) security-report.txtVirusTotal 扫描结果等

示例 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

0 浏览
Back to Blog

相关文章

阅读更多 »

Show HN: 简易 org-mode Web 适配器

Org Web Adapter 是一个轻量级本地网页应用,用于浏览和编辑 Org 文件。该应用实现为一个 Python 服务器 main.py 加上一个 HTML 模板。

GStreamer

今天的话题:通过为您提供强大的工具来操作和处理媒体流,赋能您构建更复杂的多媒体应用程序。