---

title: Git提交签名与保护分支治理(GPG-校验-强制)最佳实践

keywords:

  • 提交签名
  • GPG
  • 保护分支
  • 强制校验
  • 审计

description: 强制提交签名与保护分支策略,校验签名类型、算法与时间窗口,配合审查与状态检查提升发布可信度。

categories:

  • 文章资讯
  • 技术教程

---

核心要点

  • 允许签名类型与算法白名单:OpenPGP/SSHRSA/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
}

审计与运行治理

  • 审计记录提交 idkid、签名类型与时间窗口;保护分支变更需审批。
  • 状态检查失败或签名不合规的合并请求直接拒绝。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部