简单的问题,但据我所知,没有人在这里问过:我为什么要签署 git 提交?
为了给出更多的答案,还有这个问题:为什么我应该签署 git 标签(发布)?
最后:我应该两个都签吗?为什么,为什么不呢?如果我只签署提交/标签,什么是好/坏?
简单的问题,但据我所知,没有人在这里问过:我为什么要签署 git 提交?
为了给出更多的答案,还有这个问题:为什么我应该签署 git 标签(发布)?
最后:我应该两个都签吗?为什么,为什么不呢?如果我只签署提交/标签,什么是好/坏?
一般来说,这都是关于线程模型的。过去有几个例子,它会有所帮助。例如gitea 在他们的机器人帐户被盗后引入了它。
防止在 git 托管服务/服务器(GitHub、GitLab、Gogs/Gitea 等)上以及与它们的连接处修改源代码非常有用。
现在对于您的软件的用户来说,下载签名的发布标签并验证它们可能会很有用,这样他们就可以确定您创建了源代码和类似的东西。
请记住,如果您随后分发未签名的二进制文件,那么签署发布标签将无济于事。在大多数情况下,用户更喜欢现成的二进制文件,因此无法验证其真实性。
如果用户经常直接使用 master 分支来下载/使用软件,那么签署 git 提交也可能是有意义的。例如,当它只是一个您可以克隆的 PHP 项目并且它开箱即用时,它们可能比您必须编译它时更常见,在这种情况下,许多用户可能宁愿使用已编译的二进制文件。
然而,签名的 git 提交也可能对开发人员有意义,因为他们可以验证 git 提交中没有引入任何恶意(至少在没有提交者/贡献者故意这样做或意外签署某些内容的情况下不会)。因此,如果提交有问题,您可以确定是提交它的人引入了它。(因为你可以随意设置你的 git 用户名和邮件)但是,这只有在主分支的所有提交者都签署他们的提交时才真正有用,因此可能很麻烦。
注意:请记住,在签署 git 提交时,您必须为每次提交都这样做。一些工作流程接受您创建一个功能分支,然后只签署合并提交,但这必须适合您的工作流程。在任何情况下,这也意味着您经常必须使用您的私钥并在您的开发环境中将其(解锁)。从安全角度来看,这可能并不理想。与使用签名的 git 标签发布版本相比,您可能不会经常这样做,因此您可以使用单独的设备/VM/sandbox/user/...,在那里您没有那么多不受信任的开发代码在运行,但只是克隆/拉回购(与git pull --verify-signatures显然,如果您已经签署了提交以确保没有任何内容被破坏)或以其他方式(以“完整性保持”方式)转移整个 git repo,您可以使用保存在更多的签名密钥对标签进行签名安全的地方。这样,如果您的开发机器受到损害,您的签名密钥至少不会面临受到损害的风险。
签署 git 标签(恕我直言)比签署提交更有用,因为前者是您的软件用户主要使用的东西,而后者主要对开发人员有利,并且有风险(如上所述)。因此,使用不同的 git 签名密钥也是完全有意义的,一个用于您的版本,保存在更安全的地方/方式中,一个用于签署所有提交。使用个人 git 签名密钥对提交进行签名是有意义的,尤其是在较大的项目中,将发布/标签签名密钥分开并在项目负责人/一些受信任的人之间共享,这些人被授权发布。这样,用户也不必在他们的密钥存储中拥有 50 个您的开发人员的密钥,而只是您的项目中的一个。特别是因为用户可能无法识别您的所有开发人员,并且可能无法验证这是您的真正开发人员还是攻击者。
因此,如果您可以 签署 git tags。它已经非常有助于将您的软件安全地分发给您的用户。签署 git 提交也可能有用,但可能不如签署 git tags 重要。