Yubikey 与 Git Commit 签名
前记
休息的这几天,正好逛到了一个 Github 仓库,正好有我想玩的 Git Commit 签名验证,前段时间正好写到了 Yubikey 的 Git Commit 这不来实践一波,这个折腾完了就顺手更新两个转运的体验分享,分别是 Steam Deck 转运中国 FedEx 体验分享与 CloudFlare x Yubico Yubikey 5C NFC SFBUY 转运体验分享。
准备工作
在此之前,如果你没有看过前两篇文章,或许你得去看看 Yubikey 的大致介绍与如何生成密钥并导入到 Yubikey 中。
首先我们获取下我们之前的子密钥信息
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 的,你可以也需要这个操作
这个就是用到了本地主要的情况(
虽然我们理论上在配置的时候使用的 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 啦~
虽然想了想反正 GPG 公钥都要公布出来的,码了没什么意义,不过习惯性操作,就当无事了(
TODO
之后可能再看看集成到 IDE 这一类的 Git 能不能顺利调用 Key,之后再说~
后记
咕,隔了好长时间继续研究,思考了好久,不知道现在所学的以后在哪个行业哪个岗位能用到,后来发现聊了那么多,摆了那么多反而进度低,还不如先找点自己感兴趣的先学着,剩下的以后来说,看看之后硬氪八股文能不能找点实习 😀
Yubikey 与 Git Commit 签名
https://www.wd-ljt.com/post/1104/922.html
来源于问谛居,转载记得联系作者哟~
共有 0 条评论