了解基本的加密、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
这就是我困惑的地方,为什么我们要用我们的公钥签名,不是public吗?? 根据我的说法,它应该使用我们本地存储的私钥签署提交,然后无论我们在哪里存储我们的公钥(GitHub, GitLab等),他们都会使用公钥解密此签名以验证签名。
我肯定我漏掉了一些东西,到底发生了什么?我推测它只使用私钥进行签名,但要求ssh-agent
使用相应的私钥进行签名。
我认为我的想法是正确的:从https://git-scm.com/docs/git-config文档/git-config.txt-usersigningKey
如果git-tag[1]或git-commit[1]在创建签名标记或提交时没有选择您希望它自动选择的键,您可以使用该变量覆盖默认选择。这个选项不加修改地传递给gpg的——local-user参数,因此您可以使用gpg支持的任何方法指定密钥。如果gpg。格式设置为SSH,当使用SSH -agent时,它可以包含到您的SSH私钥或公钥的路径。也可以直接包含以key::为前缀的公钥(例如:"key::ssh-rsa XXXXXX identifier")。私钥需要通过ssh-agent可用。如果没有设置,git将调用ggp .ssh. defaultkeycommand(例如:"ssh-add -L")并尝试使用第一个可用的键。为了向后兼容,以"ssh-"开头的原始密钥,如"ssh-rsa XXXXXX标识符",被视为"key::ssh-rsa XXXXXX标识符",但这种形式是不赞成的;请使用key::格式。
看看你高亮显示的部分:
如果gpg。格式设置为SSH,当使用SSH -agent时,它可以包含到您的SSH私钥或公钥的路径。也可以直接包含以key::为前缀的公钥(例如:"key::ssh-rsa XXXXXX identifier")。私钥需要通过ssh-agent可用。
Git,使用您的私钥进行签名,但是当您使用ssh-代理时,私钥是从代理获得的,而不是从磁盘上的文件。公钥仅用于识别适当的私钥。