Yubikey 与 Git Commit 签名

前记

休息的这几天,正好逛到了一个 Github 仓库,正好有我想玩的 Git Commit 签名验证,前段时间正好写到了 Yubikey 的 Git Commit 这不来实践一波,这个折腾完了就顺手更新两个转运的体验分享,分别是 Steam Deck 转运中国 FedEx 体验分享CloudFlare x Yubico Yubikey 5C NFC SFBUY 转运体验分享

准备工作

在此之前,如果你没有看过前两篇文章,或许你得去看看 Yubikey 的大致介绍与如何生成密钥并导入到 Yubikey 中。

https://www.wd-ljt.com/post/1024/897.html
Yubikey 5C 探索之旅~ Yubikey 大致介绍
OpenPGP 密钥生成等预备工作

首先我们获取下我们之前的子密钥信息

gpg --list-secret-keys --keyid-format LONG

C:\Users\WDLJT\AppData\Roaming\gnupg\pubring.kbx
------------------------------------------------
sec   rsa4096/密钥 ID 2022-10-22 [SC]
    主密钥 ID
uid                 [ultimate] WDLJT (Hello New World!) <i@wd-ljt.com>
ssb   rsa4096/密钥 ID 2022-10-22 [E]
ssb   rsa4096/密钥 ID 2022-10-22 [S] [expires: 2024-10-21]
ssb   rsa4096/密钥 ID 2022-10-22 [E] [expires: 2024-10-21]
ssb   rsa4096/密钥 ID 2022-10-22 [A] [expires: 2024-10-21]

我们就拿到了我们的我们的主密钥 ID,不过呢我们需要的是签名的子密钥的 ID 也就是标注了 S(Sign)的密钥。

配置 Git

首先我们需要配置签名需要的密钥

git config --global user.signingKey <Sign 子密钥 ID>

然后我们可以开启自动签名

git config --global commit.gpgsign true

如果不想设置的话你可以在每次提交 Commit 的时候选择 -S 或使用 --gpg-sign 参数进行签名。

如果你的 gpg 不是在默认路径或常规的地方的话,可以用这个指令指定

git config --global gpg.program <CLI 命令(如:gpg、gpg2)或绝对路径(如:C:\\Program Files (x86)\\GnuPG\\bin\\gpg.exe)>
例如:
git config --global gpg.program gpg2
git config --global gpg.program "C:\\Program Files (x86)\\GnuPG\\bin\\gpg.exe"

GPG Yubikey 绑定(多密钥/多设备)

如果你发现你 Sign 的时候弹出的使用本地 Key 的 PIN 码提示而不是 Card 的,你可以也需要这个操作

image-20221104152857062

这个就是用到了本地主要的情况(

虽然我们理论上在配置的时候使用的 Keytocard 自动绑定了 Yubikey,但是本地换了 GPG 的路径虽然感觉他还是用 Appdata 但是还是需要重新绑定,这个时候就需要使用 gpg-connect-agent,参考这个仓库中的指南,使用

gpg-connect-agent "scd serialno" "learn --force" /bye

这时候你可以用

gpg --card-edit

查看下情况

ssb>  rsa4096/子密钥 ID  created: 2022-10-22  expires: 2024-10-21
                              card-no: 0006 202*****
ssb> rsa4096/子密钥 ID created: 2022-10-22 expires: 2024-10-21
                              card-no: 0006 202*****
ssb> rsa4096/子密钥 ID created: 2022-10-22 expires: 2024-10-21
                              card-no: 0006 202*****

有了 card-no 就说明绑定成功了。

Commit 签名

正好有个项目还没有 README,这不创建一手

先 git clone 下来,然后创建一个 README.md

然后 git add README.md 关于 Git 基本操作就不写了,真要写还不如开个新 post(

好了那我们准备好之后直接 git commit [-S] -m "Message" Commit 养成好习惯,干了什么记得写~

然后应该弹出了一个窗口输入你的 PIN 密码,请谨慎输入,如果你设置的 PIN 码尝试次数比较少的话(

然后 git 就会卡住,等待操作,等待什么操作呢,当然是某个憨憨之前设置了触摸确认,现在没触摸 金色碟片(?,总之记得及时按下否则就会自动取消gpg: signing failed: Timeout

签名完成之后就可以 push 啦~

image-20221104154134939

虽然想了想反正 GPG 公钥都要公布出来的,码了没什么意义,不过习惯性操作,就当无事了(

TODO

之后可能再看看集成到 IDE 这一类的 Git 能不能顺利调用 Key,之后再说~

后记

咕,隔了好长时间继续研究,思考了好久,不知道现在所学的以后在哪个行业哪个岗位能用到,后来发现聊了那么多,摆了那么多反而进度低,还不如先找点自己感兴趣的先学着,剩下的以后来说,看看之后硬氪八股文能不能找点实习 😀

感谢观看我的博客~
Yubikey 与 Git Commit 签名
https://www.wd-ljt.com/post/1104/922.html
来源于问谛居,转载记得联系作者哟~
THE END
分享
二维码
海报
Yubikey 与 Git Commit 签名
关于如何设置 Git,用 Yubikey 中 OpenPGP Card 签名你的 Commit,给你的 Commit 记录打上一个 Verified(,有用吗?严格意义上。。。hummm 玩玩还是可以的~
<<上一篇
下一篇>>