---
title: Git提交签名与保护分支治理(GPG-校验-强制)最佳实践
keywords:
- 提交签名
- GPG
- 保护分支
- 强制校验
- 审计
description: 强制提交签名与保护分支策略,校验签名类型、算法与时间窗口,配合审查与状态检查提升发布可信度。
categories:
- 文章资讯
- 技术教程
---
核心要点
- 允许签名类型与算法白名单:
OpenPGP/SSH,RSA/ED25519。 - 时间窗口与密钥
kid校验;禁止过期或未知密钥提交进入保护分支。 - 保护分支合并需通过状态检查与双人审批。
实现示例
type SigMeta = { type: 'OpenPGP' | 'SSH'; alg: 'RSA' | 'ED25519'; kid?: string }
type Commit = { id: string; author: string; time: number; sig?: SigMeta }
function validSig(sig?: SigMeta): boolean {
if (!sig) return false
if (!['OpenPGP','SSH'].includes(sig.type)) return false
if (!['RSA','ED25519'].includes(sig.alg)) return false
return true
}
function within(created: number, expires: number, now: number, leewaySec: number): boolean {
if (expires <= created) return false
return now + leewaySec * 1000 >= created && now - leewaySec * 1000 <= expires
}
function allowMerge(commits: Commit[], keyValid: (kid?: string) => { ok: boolean; notBefore: number; notAfter: number }, now: number): boolean {
for (const c of commits) {
if (!validSig(c.sig)) return false
const kv = keyValid(c.sig?.kid)
if (!kv.ok || !within(kv.notBefore, kv.notAfter, now, 60)) return false
}
return commits.length > 0
}
审计与运行治理
- 审计记录提交
id、kid、签名类型与时间窗口;保护分支变更需审批。 - 状态检查失败或签名不合规的合并请求直接拒绝。

发表评论 取消回复