Eric's Blog 时光荏苒,岁月如梭

启用 Git Commit 签名

2025-01-24
Eric Wong

起因

无意间阅读到一篇文章 《震惊!竟然有人在 GitHub 上冒充我的身份!》, 大致看了下 Github 网站对于 Commit 的归属的判断规则。 只需要 Commit 的邮箱在某人的账号设置的邮箱列表内。那么就会将此次提交显示为是某人的归属。这就意味着,任何一个人都可以使用 git config user.email "YOUR_EMAIL" 这一命令设置成别人的邮箱,伪装成他人进行提交。

Git Commit 签名

如果只需要设置邮箱就可以伪装成用户进行提交,那不是乱套了?因此大多数软件维护者都会要求 Commit 签名。Github 其实支持多种方式签名,这里大致记录一下自己设置 GPG 签名的方案。

Windows 安装 GPG

Windows 系统下,我使用的 scoop 包管理器,通过 scoop install gpg 就可以安装好了。 使用 gpg --version 看一下版本信息。

D:\wsdjeg>gpg --version
gpg (GnuPG) 2.4.7
libgcrypt 1.11.0
Copyright (C) 2024 g10 Code GmbH
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: D:\Scoop\apps\gpg\current\home
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

生成 GPG 密钥

参考 Github 的文档生成上传 GPG 密钥, 上传完成后使用 https:/github.com/{username}.gpg 格式链接就可以访问你的公钥。

例如我的:wsdjeg.gpg

设置 Git 签名程序

使用 where gpg 查看 gpg 命令的绝对路径:

d:\wsdjeg>where gpg
D:\Scoop\apps\gpg\current\bin\gpg.exe

清除之前的设置:

git config --global --unset gpg.format

之前导入已备份的私钥后,使用 git commit -S 一直提示没有私钥,找了很久原因才知道,原来需要设置 Git 的签名方式及程序,可能是原来设置过。

git config --global gpg.program "D:\Scoop\apps\gpg\current\bin\gpg.exe"

使用 gpg --list-secret-keys --keyid-format=long 列出 GPG 密钥:

d:\wsdjeg\my-blog>gpg --list-secret-keys --keyid-format=long
D:\Scoop\apps\gpg\current\home\pubring.kbx
------------------------------------------
sec   rsa2048/41BB7053E835C848 2021-09-21 [SC]
      9C957B574786F570AC69625041BB7053E835C848
uid                 [ unknown] Shidong Wang (Shidong's GPG key) <[email protected]>
ssb   rsa2048/D3E3902EF4E8074C 2021-09-21 [E]

设置 Git 签名的 ID:

git config --global user.signingkey 41BB7053E835C848

设置 Git 默认启用 Commit 签名:

git config --global commit.gpgsign true

版权声明:本文为原创文章,遵循 署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)版权协议,转载请附上原文出处链接和本声明。


分享到:

评论

目前只支持使用邮件参与评论。

目录