git commit -a -S -m "This is a Signed commit"
git cat-file -p HEAD
tree 1265193cc831c2bd47cedbb27f029e5d45fa0bb039d5bb5136f152a3e88c07b0
parent 16625976433ec56a26feb1478051b28b78684a3d68f475221afcfae2a7aaaa0d
author John Doe <john.doe@internet.www> 1612379624 +0100
committer John Doe <john.doe@internet.www> 1612379624 +0100
gpgsig-sha256 -----BEGIN PGP SIGNATURE-----
iQGzBAABCAAdFiEELgGt+L8yg4keIDJDpyYj1XHdLa8FAmAa9egACgkQpyYj1XHd
La+BogwA0VEoobCJPRLk2olHzW6iO9ioyxIrrW6uPAcLv6uernxrGDK6odYuywED
XeVEu3L9/HLG8MYSqgAGKDWfiOphRi5Lw1fLnSA3MNC1uh18OqdmD/PjyP9hMnbC
XayugJJ2dPkUHADxeDoQOGHg6wmfn+/4IsHit74YsAYXcDz1/QIHrEGMPCwROGCX
Nb1srMw2/8e+NM9U5h5KSw5ZYmBtSynIWCsHBC2w8eqvuhKMmKxbGV3izV7eOTfl
R8aC2FJSuSd/MhGprAki2sW1efiNr1EJNt/hvP2S9Eq/fkLUlVuWk5cyg/8tDJX5
VQO5RqCTR/Yz5mleoKMOeBBARzWK/r1l0bVQZYoraO8I8zxuLt5gkxqvqTOrhOKy
uTX58BdQHSlx1fU02UuPruimpbSZOBhwPFeVXl8Kj3zUWLNpTeQXZ/MSNZOiR1qF
xMdqKbuzh53B3tqvd02Cy7jdIssT8DwLM5V3IjYfv/GG/iQOE7BHGxYbPgEkv4e6
KvUBxEjj
=8gBZ
-----END PGP SIGNATURE-----
This is a Signed commit
正在签署的摘要到底是什么?如果签名嵌入到提交对象中,那么它很难是提交哈希本身-那么它是树哈希吗?还是别的什么?这是否意味着提交消息没有签名并且可能被篡改?
注意:我在这里使用一个用--object-type sha256初始化的git存储库来使用基于SHA-256的哈希值(默认情况下git使用SHA-1),但我的问题也适用于带有SHA-1哈希值的git存储库(以防gpg签名对SHA-1和SHA-256存储库的工作方式不同)
您签名的数据是提交或标记对象的全部,减去以gpgsig
开始的任何多行标题的内容,如果是标记,则减去尾随标记签名的内容。因此,基本上是对象的内容减去签名部分本身。包含消息的。
请注意,对象的哈希包含签名,因此除非重写历史记录,否则不能删除或更改签名(或添加其他签名)。
Git2.30和之前的版本有一个bug,它们会错误地将带有多个签名的提交或标记标记为无效。下一个版本可能会包含一个补丁来修复这个问题。
我从brew安装了GPG。 它是gnupg2-2.0。30_2。 当我提交时,确实会收到一条错误消息: 我使用命令: 它给了我: 然后我使用了这个命令: 提交会返回相同的错误消息。 我怎样才能解决这个问题?
2048位RSA密钥,ID AAAAAAA,创建于2016-07-01 错误:gpg无法对数据签名致命:无法写入提交对象 注意-我仍然可以使用提交更改
Pushes 签名 git push can be instructed to sign the push. The server may use this to control the execution of certain hooks: git push 可以被指示进行签名 push。服务器可以使用它来控制一些钩子的执行: ❯ git push --signed Github 现在貌似并没有
Merges 签名 git merge 命令可以在合并没有使用 --verify-signatures 命令带有不可信 GPG 签名的 commit/branch 时检查和拒绝 如果被合并的分支中有任何没有被有效签名认证的提交,合并将不会继续。 Merge commit 本身也是可以被签名的(使用 -S): ❯ git checkout -b enhancement/foo ❯ touch qux
Commits 签名 在上文提到的 git 仓库中添加一个新文件,并使用 -S 标签来提交(commit)它。(注意不是 -s 标签,在 commit 命令下它意味着 Signed-Off): ❯ touch biz ❯ git add biz ❯ git commit -S -m "Add biz" 你可以通过在 ~/.gitconfig.local 文件中添加下列内容来开启 commit 自动
Tags 签名 假设你有一个额外的文件可以在主 ~/.gitconfig 中添加 gitconfig 设置: [include] path = .gitconfig.local 配置 ~/.gitconfig.local 文件让其指向你插入的 GPG 签名钥匙: [user] signingkey = <signingKeyId> 开启 git tag -m <message> 来