YubiKey具有私钥签名功能,将其用于Git签名会使流程大大简化。
一、安装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 可以在证书界面找到。
命令执行结果如下
删除后,如果你拔掉你的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并报错,重新进行就行),当你按了后,签名就完成了。