一尘不染

如何自动验证所有提交者PGP对其提交进行签名

jenkins

Github支持使用PGP密钥签署提交。

我们有一个开源项目,该项目接受没有PGP密钥的人员的贡献。安全性对我们至关重要,因此我们决定,
合并合并请求请求的每个人都将使用其PGP密钥对合并进行签名,因此每次实际提交都将由作者和/或合并直接签名。

设置连续集成构建以确保这确实发生的最佳方法是什么?如果有人将代码提交或合并到主存储库中,而没有使用给定授权密钥列表中的PGP密钥对其进行签名,我们希望构建失败,发出警报并可能还原提交/合并。

我们使用的是github,所以我想知道github挂钩是否有帮助。我相信我们正在使用Jenkins forCI,但是,这可能无关紧要,因为这将是自定义脚本。

需要说明的是:该项目接受开源开发人员的捐助,我们将不要求每个参与者都拥有PGP密钥。但是,每个在github中具有合并权限的人都必须具有PGP密钥,我建议的构建将对此进行验证。即使不是每个提交,合并提交本身也会被PGP 签名。


阅读 207

收藏
2020-07-25

共1个答案

一尘不染

更新(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
.


原始答案(2014年6月)

通过编辑,您使用了“ Git恐怖故事:
带有签名提交的存储库完整性 ” 一文中的选项2 :

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

然后做一个签名的请求拉(其中
的话可以随时签署commit.gpgsign的
设定)能够签署部分限制
将被合并为唯一的贡献,提交(而不是在提交
任何随机合并两个分支之间)。

有关该过程的更多详细信息,请参见:

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

2020-07-25