跳转至

Windows 引擎签名

引擎发布在计算发布校验和之前,会使用 Azure Artifact Signing 对 impeccable.exe 进行签名。发布者为 Renaissance Geek, Inc. 现有的发布资产是不可变的;切勿在同一版本下用签名后的字节替换已发布的未签名二进制文件。

访问边界

  • Azure 帐户:impeccable-signing,East US(https://eus.codesigning.azure.net/)。
  • Public Trust 证书配置文件:impeccable-windows。
  • 用户分配的托管标识:impeccable-release-signing,位于同一资源组中。
  • 其唯一的 Azure 角色是 Artifact Signing Certificate Profile Signer,范围限定为 impeccable-signing/certificateProfiles/impeccable-windows,而非帐户或订阅。
  • 联合凭据:github-windows-signing,颁发者 https://token.actions.githubusercontent.com,受众 api://AzureADTokenExchange,主题 repo:pbakaus/impeccable:environment:windows-signing。
  • GitHub 环境:windows-signing,限制为匹配 engine-v* 的 标签,以 pbakaus 为必需审阅者,并关闭管理员绕过。自我审阅机制允许必需审阅者批准他们自己触发的发布。
  • 环境变量 AZURE_CLIENT_ID、AZURE_TENANT_ID 和 AZURE_SUBSCRIPTION_ID 包含的是公共标识符,而非机密。GitHub 中未存储任何客户端机密、私钥或 PFX。

发布与验证

运行常规的 bun run release:engine 流程,然后在 GitHub Actions 中审阅并批准该标签对应的 windows-signing 部署。批准前请检查标签的提交和工作流:环境批准会授予该作业以公司身份签名的能力。

构建作业将 Windows 输出上传为 unsigned-windows-x64。一个单独的 Windows 运行器从同一次运行下载该工件,仅对 impeccable.exe 进行签名,并且在上传 impeccable-windows-x64 之前要求有效的 Authenticode 签名、预期的发布者和时间戳。该运行器不会检出仓库代码,也不会执行下载的引擎。只有其作业会收到 OIDC 令牌;只有发布作业才能写入发布。发布过程会等待签名成功,并且只下载 impeccable-* 工件,因此它无法打包未签名的中间产物。

必须使用 RFC 3161 时间戳,因为 Azure 颁发的是短期有效签名证书。不要固定叶证书指纹:Azure 会轮换这些指纹。如果签名或验证失败,请修复原因后重试;不要添加未签名回退方案或削弱环境门禁。

工作流配置由 bun test tests/release-engine-workflow.test.js 进行回归测试。仍需进行一次受保护的真实引擎发布,以端到端验证 Azure OIDC 和 Authenticode。

参考:Azure 签名角色、官方签名 Action。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 im/impeccable