Git 如何自动验证所有提交人PGP签署其提交

Git 如何自动验证所有提交人PGP签署其提交,git,github,jenkins,continuous-integration,pgp,Git,Github,Jenkins,Continuous Integration,Pgp,使用PGP密钥对提交进行签名 我们有一个开源项目,它接受来自没有PGP密钥的人的贡献者。安全性对我们来说至关重要,因此我们决定,每个合并拉请求的人都将使用其PGP密钥签署合并,因此每个实际提交都将由作者和/或合并直接签署 建立一个持续集成构建以确保这种情况真正发生的最佳方法是什么?如果有人提交代码或将代码合并到主repo中,而不使用给定授权密钥列表中的PGP密钥对其进行签名,我们希望构建失败,警报响起,提交/合并可能恢复 我们正在使用github,所以我想知道github钩子是否有帮助。我相信我

使用PGP密钥对提交进行签名

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

建立一个持续集成构建以确保这种情况真正发生的最佳方法是什么?如果有人提交代码或将代码合并到主repo中,而不使用给定授权密钥列表中的PGP密钥对其进行签名,我们希望构建失败,警报响起,提交/合并可能恢复

我们正在使用github,所以我想知道github钩子是否有帮助。我相信我们正在使用詹金斯的CI,但这可能并不重要,因为它将是一个自定义脚本

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

更新(2021年4月):

见“”:

为了提高安全性和对贡献真实性的信心,您可以在GitHub.com上标记归属于您但未经您签名的提交和标记

启用警戒模式(现在在beta版中可用)后,归属于您的未签名提交将被标记为未经验证的标记。
这可以提醒您和其他人有关真实性的潜在问题

Git提交的作者和提交人很容易被欺骗。
例如,某人可以推送声称来自您的提交,但事实并非如此。> 与显示passport一样,提交者可以通过使用GPG或S/MIME密钥对提交进行签名来增加对提交的信任

现在,当您启用警戒模式时,如果提交属于您但未经您签名,则将标记提交。
如果有人试图欺骗你作为提交人或作者的身份,这会引起注意。启用警戒模式后,所有提交和标记都标记为三种验证状态之一:已验证、部分验证或未验证

你自己试试吧
首先,查看如何操作。
然后,在以下位置启用警戒模式:

开始签署提交和标记后,请确保启用警戒模式。
启用后,推送到GitHub.com的任何未签名提交或标记都将标记为“未验证”,包括过去的提交

了解更多关于


更新(2016年4月)

见“”:

从今天开始,GitHub将显示提交和标记的签名时间

查看签名提交或标记时,您将看到一个标记,指示是否可以使用上载到GitHub的参与者的任何GPG密钥验证签名。
您可以通过访问上传GPG密钥


原始答复(2014年6月)

在编辑过程中,您使用了文件“”中的选项2:

选项2非常简单,只需将
-S
参数传递给。
如果合并是快进的(也就是说,所有提交都可以简单地应用于头部顶部,而不需要任何合并),那么您需要使用
--no ff
选项强制合并提交

然后making(如果是,则始终可以签名)可以将签名部分限制为仅作为贡献提交合并的提交(而不是两个分支之间的任何随机合并)

有关该过程的更多详细信息,请访问:

  • “”
  • “”
  • “”(适用于gpg部分)
因此,如果您的持续集成构建仅合并请求拉取(在中使用),则可以检查这些特定提交是否已签名(如果未签名,则不合并)。

这个脚本就是这样一个检查的例子:“.”

是走这条路之前的一个重要阅读。然后:谢谢。哇,我已经有一段时间没问任何问题了。。。不要忘记使用Git2.23也可以对标签进行签名。