YubiKey具有私钥签名功能,将其用于Git签名会使流程大大简化。

一、安装gpg4win

点我进入GPG4Win官网

安装完后桌面会出现一个软件图标,这个软件可以帮助你使用GUI来管理密钥

二、进入Kleopatra,创建或导入密钥

如果你已经有了密钥,请导入,如果没有密钥,下面的步骤是创建你的密钥。

点进去后按下图填写。名字不建议写真实姓名,邮箱地址写自己的邮箱,选中使用密码句保护生成的密钥。

点进去高级设置,密钥类型我们选择ECDSA/EdDSA的Ed25519和cv25519(私钥短,强度高,推荐使用),证书用途自己选择,我这里为了方便全选(你也可以之后设置子密钥),并且没有设置到期时间。

选好后点击OK,进入生成密钥阶段,出现了一个窗口,有passphrase和repeat,passphrase就是密钥,repeat就是重复输入密钥,输入你想要设置的密钥后进入下一步。

如果你输入的密码低于8个字符,系统会提醒你使用一个更长的密码,选择“Take this one anyway”可以强制使用你的弱密码。

创建完成后,你的密钥就会显示在软件的主界面了,到这里你已经成功的创建了一个密钥。

三、将密钥导入你的Yubikey

插入你的YubiKey到电脑上,进入智能卡管理界面(如果没有反应,重启软件)

为了签名的安全,请更改PIN与管理员PIN(注意,这两个不一样)

YubiKey的PIN出厂默认值是123456,管理员PIN默认值是12345678,更改为你能记住的。

更改完后重新进入“证书”页面,双击你的密钥证书,点击More Details.

进入后显示了子密钥详情。

右键,逐个导入到智能卡,输入你的证书密钥和智能卡管理员PIN(注意别输入错了)

导入后的样子

导入完后,请备份你的私钥(证书页面右键备份私钥,或者打印),接下来我们要删除电脑上的私钥(因为你的私钥已经进入了YubiKey中,是安全的),并且你要导出一份你的公钥,方便以后导入。

打开cmd,输入

gpg --delete-secret-keys <KeyID>

其中,KeyID 可以在证书界面找到。

KeyID可以在证书界面找到

命令执行结果如下

删除后,如果你拔掉你的YubiKey,那么你的证书显示就不是加粗了,但是如果你重新插入并刷新后就会重新变粗,代表可以使用。

这样我们将私钥导入YubiKey并删除本机私钥的操作就完成了。

四、配置 Visual Studio

如果你的Git可以调起签名,则可以跳过这一步。

由于visual studio用的是自己的git.exe,所以得先找到再修改。

"C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw64\bin\"

这是本人电脑上Visual studio 2022使用的Git路径,使用控制台打开它。

输入

git config --global user.signingkey <你的KeyID>

这个指令将指引Git使用你的Key

输入

git config --global commit.gpgsign true

这个指令可以强制开启全局签名

五、配置 Git

打开你的GitHub设置页面,选择“SSH and GPG keys”,选择New GPG Key,随便填写标题,Key部分要输入的是公钥(不要输入私钥!!),使用记事本等文本编辑工具打开你刚刚备份的公钥,复制里面的内容填写进去,点击确定就可以了。

六、配置 配置YubiKey的TOUCH功能

安装YubiKey Manager后,用cmd进入根目录

输入指令

ykman openpgp keys set-touch SIG true
ykman openpgp keys set-touch ENC true
ykman openpgp keys set-touch ATT true
ykman openpgp keys set-touch AUT true

分别输入上面四个指令,提供4次管理员PIN即可打开YubiKey的触碰功能。

从此以后,你再使用Visual Studio进行Git commit的时候,YubiKey会闪烁提示你应该按一下(你如果长时间不按,Git commit会timed out并报错,重新进行就行),当你按了后,签名就完成了。