Github支持使用PGP密钥签署提交。
我们有一个开源项目,该项目接受没有PGP密钥的人员的贡献。安全性对我们至关重要,因此我们决定, 合并合并请求请求的每个人都将使用其PGP密钥对合并进行签名,因此每次实际提交都将由作者和/或合并直接签名。
设置连续集成构建以确保这确实发生的最佳方法是什么?如果有人将代码提交或合并到主存储库中,而没有使用给定授权密钥列表中的PGP密钥对其进行签名,我们希望构建失败,发出警报并可能还原提交/合并。
我们使用的是github,所以我想知道github挂钩是否有帮助。我相信我们正在使用Jenkins forCI,但是,这可能无关紧要,因为这将是自定义脚本。
需要说明的是:该项目接受开源开发人员的捐助,我们将不要求每个参与者都拥有PGP密钥。但是,每个在github中具有合并权限的人都必须具有PGP密钥,我建议的构建将对此进行验证。即使不是每个提交,合并提交本身也会被PGP 签名。
更新(2016年4月)
See “GitHub GPG signature verification”:
starting today GitHub will show you when commits and tags are signed. When you view a signed commit or tag, you will see a badge indicating if the signature could be verified using any of the contributor’s GPG keys uploaded to GitHub. You can upload your GPG keys by visiting thekeys settings page.
starting today GitHub will show you when commits and tags are signed.
When you view a signed commit or tag, you will see a badge indicating if the signature could be verified using any of the contributor’s GPG keys uploaded to GitHub. You can upload your GPG keys by visiting thekeys settings page.
原始答案(2014年6月)
通过编辑,您使用了“ Git恐怖故事: 带有签名提交的存储库完整性 ” 一文中的选项2 :
选项#2就像将-S参数传递给一样简单git merge。 如果合并是一个快进操作(也就是说,所有提交都可以简单地应用于 HEAD顶部而无需合并),那么您将需要使用该 –no-ff选项来强制执行合并提交。
然后做一个签名的请求拉(其中 的话可以随时签署commit.gpgsign的 设定)能够签署部分限制 将被合并为唯一的贡献,提交(而不是在提交 任何随机合并两个分支之间)。
有关该过程的更多详细信息,请参见:
因此,如果您的持续集成构建仅合并request-pull(在此测试脚本中使用),则可以检查这些特定的提交是否已签名(如果没有,则不要合并)。此脚本是此类检查的示例:“ check-commit- signature”。