在没有gpg签名的情况下验证git提交

在没有gpg签名的情况下验证git提交,git,version-control,gitlab,Git,Version Control,Gitlab,我们开始使用git作为VCS,之前使用的是SVN,并发现在git中,您可以轻松识别更改和提交背后的真实人物。现在,我们想知道为什么会选择这种设计,是否有一件事我们忽略了 让我们来评估以下几点: 每个人都向gitlab注册了ssh密钥 提交未使用gpg签名 每个人都使用注册的ssh密钥使用gitbash 现在我们都知道,作者和提交人只是git的元数据,很容易被欺骗如下: Author: Max Mustermann <max.mustermann@company.com> Au

我们开始使用git作为VCS,之前使用的是SVN,并发现在git中,您可以轻松识别更改和提交背后的真实人物。现在,我们想知道为什么会选择这种设计,是否有一件事我们忽略了

让我们来评估以下几点:

每个人都向gitlab注册了ssh密钥 提交未使用gpg签名 每个人都使用注册的ssh密钥使用gitbash 现在我们都知道,作者和提交人只是git的元数据,很容易被欺骗如下:

Author:     Max Mustermann <max.mustermann@company.com>
AuthorDate: Mon Jun 4 13:12:47 2018 +0200
Commit:     Incognito User <Incognito@fake.com>
CommitDate: Mon Jun 4 13:13:26 2018 +0200
git config-global-add user.emailIncognito@fake.com git config-global-add user.name Incognito user git commit-m你不知道我到底是谁-author=Max Mustermann git推送 提交的元数据将如下所示:

Author:     Max Mustermann <max.mustermann@company.com>
AuthorDate: Mon Jun 4 13:12:47 2018 +0200
Commit:     Incognito User <Incognito@fake.com>
CommitDate: Mon Jun 4 13:13:26 2018 +0200
现在,我认为必须有一种方法来找到用于提交的ssh密钥或真人,因为终端和系统知道密钥,因此知道提交和推送背后的真人

问:如果不使用gpg签名,根本没有办法找到真人吗

PS:不,我们不相信对方会利用这一点,但我们很好奇,希望理解。

更新-从torek的评论中复制信息,因为我认为这一上下文非常重要,应该在答案本身而不是仅在评论中提供:

首先,需要将git与gitlab分开。就git而言,ssh只是连接到服务器可能使用的协议之一。您的ssh密钥或其有效性对git并不重要;这是您和服务器之间的事,因为服务器会对您进行身份验证,以便它可以决定您是否有权通过ssh进行连接

服务器可能会执行更细粒度的授权检查,特别是对于像gitlab这样的主机,它的全部功能是与git集成。尽管如此,这是主持人的事,不是git的事

gitlab等托管服务可以选择基于ssh密钥记录活动,也可以不这样做。即使他们这样做了,这也只能告诉您是谁将提交推送到了该服务器,这可能与作者或提交者不同。例如:

比方说爱丽丝写了代码;她是作者。她给鲍勃寄了一份她的作品。Bob将代码放入本地git回购中。鲍勃是提交人。Bob创建了一个捆绑文件并将其发送给Cindy。现在Cindy将包含Alice代码的Bob提交加载到她的本地repo中,然后使用她的ssh密钥推送到gitlab。现在,git本身并不关心Cindy在其中的角色;她不是作者,也不是提交人。但如果gitlab选择基于ssh密钥记录活动,gitlab可能会记录Cindy向该服务器引入了提交

在git中创建可验证提交的方法是使用签名[1]。因此,如果不使用[git记录真人的机制],根本无法找到真人


注意,这源于Git的分布式特性。如果没有某种外部约束,就不可能说辛迪是否合法地转载了爱丽丝和鲍勃的作品。有了SVN,就有了一个明确区分的中央服务器/真相来源,Alice必须连接到该服务器以创建提交,之后Bob必须连接到该服务器,Cindy必须连接到该服务器。每个人都单独连接到服务器。与SVN不同,Git并不认为这种情况一定会发生。如果您想自己强制执行这样的策略,可以让服务器来执行

-斗牛士

[1] 虽然我不知道他们的观点是否发生了变化,但至少一些git开发人员在早期表示,签署标签——而不是直接签署提交——是正确的做法。

更新——从torek的评论中复制信息,因为我认为这一背景非常重要,应该在答案本身中提供,而不仅仅是在评论中:

首先,需要将git与gitlab分开。就git而言,ssh只是连接到服务器可能使用的协议之一。您的ssh密钥或其有效性对git并不重要;这是您和服务器之间的事,因为服务器会对您进行身份验证,以便它可以决定您是否有权通过ssh进行连接

服务器可能会执行更细粒度的授权检查,特别是对于像gitlab这样的主机,它的全部功能是与git集成。尽管如此,这是主持人的事,不是git的事

gitlab等托管服务可以选择基于ssh密钥记录活动,也可以不这样做。即使他们这样做了,这也只能告诉您是谁将提交推送到了该服务器,这可能与作者或提交者不同。例如:

比方说爱丽丝写了代码;她是作者。她给鲍勃寄了一份她的作品。Bob将代码放入本地git回购中。鲍勃是提交人。鲍勃创建了一个包 然后把它寄给辛迪。现在Cindy将包含Alice代码的Bob提交加载到她的本地repo中,然后使用她的ssh密钥推送到gitlab。现在,git本身并不关心Cindy在其中的角色;她不是作者,也不是提交人。但如果gitlab选择基于ssh密钥记录活动,gitlab可能会记录Cindy向该服务器引入了提交

在git中创建可验证提交的方法是使用签名[1]。因此,如果不使用[git记录真人的机制],根本无法找到真人


注意,这源于Git的分布式特性。如果没有某种外部约束,就不可能说辛迪是否合法地转载了爱丽丝和鲍勃的作品。有了SVN,就有了一个明确区分的中央服务器/真相来源,Alice必须连接到该服务器以创建提交,之后Bob必须连接到该服务器,Cindy必须连接到该服务器。每个人都单独连接到服务器。与SVN不同,Git并不认为这种情况一定会发生。如果您想自己强制执行这样的策略,可以让服务器来执行

-斗牛士


[1] 虽然我不知道他们的观点是否发生了变化,但至少一些git开发人员在早期表示,签署标签——而不是直接签署提交——是正确的做法。

我认为集中式和分布式的主要区别在于,在集中式上,你必须通过一个身份验证过程来验证你是你所说的人,以便能够被信任,然后提交或做其他事情


但在英国,每个人都是自己王国的国王/王后。我不需要在我的计算机上对我自己的回购协议进行身份验证,对吗?然后记住,即使推送可以在分布式VCS上进行,但实际上它是为拉送而设计的,所以没有人会弄乱我的回购协议。我要从谁那里拉?我信任的人,对吗?因此,仍然有一些信托参与,但它在另一个地方,最终,你是自己回购协议的所有者。没有人能强迫你接受你自己的回购协议中你不喜欢的变化。Linus 2007年在git for google上的演讲已经解释了所有的基础知识

我认为集中式和分布式之间的一个主要区别在于,在集中式上,您必须通过身份验证过程来验证您是您所说的那个人,以便能够被信任,然后提交或做其他事情


但在英国,每个人都是自己王国的国王/王后。我不需要在我的计算机上对我自己的回购协议进行身份验证,对吗?然后记住,即使推送可以在分布式VCS上进行,但实际上它是为拉送而设计的,所以没有人会弄乱我的回购协议。我要从谁那里拉?我信任的人,对吗?因此,仍然有一些信托参与,但它在另一个地方,最终,你是自己回购协议的所有者。没有人能强迫你接受你自己的回购协议中你不喜欢的变化。Linus 2007年在git for google上的演讲已经解释了所有的基础知识

首先:自Git 2.19 2018年第三季度以来,新的配置变量gpg.format可以设置为openpgp或x509,而gpg..程序用于指定使用什么程序来处理格式意味着:您可以通过gpgsm使用x.509证书与CMS,而不是通过gnupg使用openpgp

是一个类似于gpg的工具,用于在X.509证书和上提供数字加密和签名服务。 它主要用作S/MIME邮件处理的后端

是IETF的加密保护消息标准。 加密方案和协议可以使用它对任何形式的数字数据进行数字签名、摘要、验证或加密

是的,Git有一种不用gpg签名就能找到真人的方法

第二,GitLab于2020年2月12日8日提供支持

Git存储库中的每个提交都有一个作者,但这并没有经过Git的验证,这意味着很容易创建由其他人编写的提交。 提交签名允许您证明您是提交的作者。这对于敏感项目和某些商业环境非常重要

在Git2.19中,OpenGPG签名和验证支持被扩展到包括对使用X.509证书的S/MIME的支持,因为管理这些证书对大型组织更为友好

感谢西门子的支持,GitLab现在还支持提交的S/MIME签名验证!此外,首先还要感谢西门子公司

看,还有


是的,现在有一种与GitLab集成的方法,可以在不使用gpg签名的情况下找到真人

首先:自2018年第三季度Git 2.19以来,新的配置变量gpg.format可以 e设置为openpgp或x509,gpg..用于指定用于处理格式的程序的程序意味着:您可以通过gpgsm使用带有CMS的x.509证书,而不是通过gnupg使用openpgp

是一个类似于gpg的工具,用于在X.509证书和上提供数字加密和签名服务。 它主要用作S/MIME邮件处理的后端

是IETF的加密保护消息标准。 加密方案和协议可以使用它对任何形式的数字数据进行数字签名、摘要、验证或加密

是的,Git有一种不用gpg签名就能找到真人的方法

第二,GitLab于2020年2月12日8日提供支持

Git存储库中的每个提交都有一个作者,但这并没有经过Git的验证,这意味着很容易创建由其他人编写的提交。 提交签名允许您证明您是提交的作者。这对于敏感项目和某些商业环境非常重要

在Git2.19中,OpenGPG签名和验证支持被扩展到包括对使用X.509证书的S/MIME的支持,因为管理这些证书对大型组织更为友好

感谢西门子的支持,GitLab现在还支持提交的S/MIME签名验证!此外,首先还要感谢西门子公司

看,还有


是的,现在有一种与GitLab集成的方法,可以在不使用gpg签名的情况下找到真人

推送不属于任何一端的历史记录,您必须查看推送到的远程设备的日志,以查看它是否记录了一些有用的信息来验证这一点。简短的回答是:No-Git是加密安全的,但它不是万无一失的。然而,Git有几种使用GPG对工作进行签名和验证的方法。推送不属于任何一端的历史记录,您必须查看推送到的远程设备的日志,以查看它是否记录了一些有用的内容来验证这一点。简短的回答是:不,Git是加密安全的,但它不是万无一失的。然而,Git有几种使用GPG对工作进行签名和验证的方法。如果没有某种外部约束,就不可能说辛迪是否合法地转载了爱丽丝和鲍勃的作品。有了SVN,就有了一个明确区分的中央服务器/真相来源,Alice必须连接到该服务器以创建提交,之后Bob必须连接到该服务器,Cindy必须连接到该服务器。每个人都单独连接到服务器。与SVN不同,Git并不认为这种情况一定会发生。如果你想自己执行这样的策略,你可以让你的服务器来执行。注意,这是由Git的分布式特性引起的。如果没有某种外部约束,就不可能说辛迪是否合法地转载了爱丽丝和鲍勃的作品。有了SVN,就有了一个明确区分的中央服务器/真相来源,Alice必须连接到该服务器以创建提交,之后Bob必须连接到该服务器,Cindy必须连接到该服务器。每个人都单独连接到服务器。与SVN不同,Git并不认为这种情况一定会发生。如果你想自己执行这样的策略,你可以让你的服务器来执行。我只是想说,即使我将另一个答案标记为正在解决,我仍然感谢你的输入和你的附加信息。我只是想说,即使我将另一个答案标记为正在解决,我仍然感谢你的投入和你的补充信息。