繁体   English   中英

git 签名提交和 user.signingkey 选项的内部工作原理是什么?

[英]What is the internal working of git signing commits and the user.signingkey option?

我了解基本加密、ssh 密钥和证书。 在配置签名 git 提交时,我遇到了https://docs.github.com/en/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key

根据文档,我使用ssh密钥进行签名:

$ git config --global user.signingkey /PATH/TO/.SSH/KEY.PUB

这就是我感到困惑的地方,为什么我们要用我们的公钥签名,那不是公开的吗? 根据我的说法,它应该使用我们本地存储的私钥签署提交,然后无论我们在哪里存储我们的公钥(GitHub、GitLab 等),他们都会使用公钥解密此签名以验证签名。

我确定我遗漏了一些底层的东西,到底发生了什么? 我推测它仅使用私钥进行签名,但要求ssh-agent使用相应的私钥进行签名。

我认为我的想法是正确的:来自https://git-scm.com/docs/git-config#Documentation/git-config.txt-usersigningKey

如果 git-tag[1] 或 git-commit[1] 在创建签名标签或提交时没有选择您希望它自动选择的键,您可以使用此变量覆盖默认选择。 这个选项被原封不动地传递给 gpg 的 --local-user 参数,所以你可以使用 gpg 支持的任何方法指定一个键。 如果 gpg.format 设置为 ssh 这可以包含您的私有 ssh 密钥或使用 ssh-agent 时的公共密钥的路径。 或者,它可以包含直接以 key:: 为前缀的公钥(例如:“key::ssh-rsa XXXXXX 标识符”)。 私钥需要通过 ssh-agent 可用。 如果未设置 git 将调用 gpg.ssh.defaultKeyCommand(例如:“ssh-add -L”)并尝试使用第一个可用的密钥。 为了向后兼容,以“ssh-”开头的原始密钥,例如“ssh-rsa XXXXXX identifier”,被视为“key::ssh-rsa XXXXXX identifier”,但这种形式已被弃用; 请改用 key:: 形式。

看一下您突出显示的部分:

如果 gpg.format 设置为 ssh 这可以包含您的私有 ssh 密钥或使用 ssh-agent 时的公共密钥的路径。 或者,它可以直接包含以 key:: 为前缀的公钥(例如:“key::ssh-rsa XXXXXX 标识符”)。 私钥需要通过 ssh-agent 可用。

Git确实使用您的私钥进行签名,但是当您使用 ssh-agent 时,私钥是从 agent中获取的,而不是从磁盘上的文件中获取的。 公钥仅用于识别适当的私钥。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM