如何自动验证所有提交者PGP签署他们的提交

时间:2014-06-06 04:30:30

标签: git github jenkins continuous-integration pgp

Github supports使用PGP密钥签名提交。

我们有一个开源项目,接受没有PGP密钥的人的贡献者。安全对我们来说至关重要,因此我们决定合并拉取请求的每个人都会使用他的PGP密钥签署合并,因此每个实际提交将由作者直接签名,和/或通过合并。

设置连续集成构建以确保实际发生这种情况的最佳方法是什么?我们希望构建失败,警报响起,并且可能提交/合并还原,如果有人提交或合并代码到主仓库,而不用给定的授权密钥列表中的PGP密钥签名。

我们正在使用github,所以我想知道github钩子可能会有所帮助。我相信我们会将Jenkins用于CI,但这可能并不重要,因为它将成为自定义脚本。

澄清:该项目接受开源开发人员的贡献,我们不希望每个人都拥有PGP密钥。但是,github 中具有合并权限的每个人都必须拥有PGP密钥,我建议的构建将验证这一点。合并提交本身将进行PGP签名,即使不是每次提交都是。

1 个答案:

答案 0 :(得分:4)

更新(2016年4月)

请参阅“GitHub GPG signature verification”:

  从今天开始,GitHub会在提交和标记签名时向您显示。

https://cloud.githubusercontent.com/assets/25792/14253743/87b504be-fa41-11e5-9140-6dc8b7203c31.png

  

当您查看已签名的提交或标记时,您将看到一个徽章,指示是否可以使用上传到GitHub的任何贡献者的GPG密钥验证签名。
  您可以访问keys settings page 来上传您的GPG密钥。

https://cloud.githubusercontent.com/assets/25792/14290042/5b27dab2-fb12-11e5-9ff9-44116a7780ea.png


原始答案(2014年6月)

在编辑中,您使用了“A Git Horror Story: Repository Integrity With Signed Commits”文章中的选项2:

  

选项#2就像将-S参数传递给git merge一样简单   如果合并是快进的(也就是说,所有提交都可以简单地应用于HEAD顶部而不需要合并),那么您需要使用--no-ff选项来强制进行合并提交。

然后使a signed request-pull(如果commit.gpgsign is set可以始终签名)可以将签名部分限制为仅作为贡献提交合并的提交(而不是两个分支之间的任何随机合并) )。

有关该流程的更多详情:

因此,如果您的持续集成构建仅合并请求 - 拉(在this test script中使用),您可以检查这些特定提交是否已签名(如果不是,则不合并)。
此脚本是此类检查的示例:“check-commit-signature”。