引言
第一次接触Canokey还是在2021年,当时跟风买了CanoKey Pigeon首发,到手以后把GPG密钥塞进去再加到几个网站做认证器以后就一直是半吃灰状态,毕竟网站的登录不会天天掉,而GPG更是一万年没人给我发加密的信息,连用来git签名的次数都少(我懒)。
前段Canokey群抽奖送Canary测试版,本人有幸中得一个:
那这不再折腾一下似乎就有点不合适了。
环境确认
硬件信息:
CanoKey Canary(3.0.0-rc2-0 dirty build)
操作系统:
Windows 10 LTSB 21H2
软件版本:
gpg4win 4.4 (gpg 2.4.7)
OpenSC 0.26.0
Canokey的功能主要有这几大块:
1 | WebAuthn (Passkey) |
我们分别来介绍怎么玩(也是给自己留个备忘)。
WebAuthn (Passkey)
然后就可以开始用作网站登录的认证了,这里不再赘述。
SSH FIDO
参考WebAuthn (Passkey)
所有命令均在PowerShell中运行
确保安装的 OpenSSH 为 8.2 及以上版本
1 | ssh -V |
本人测试过在当前环境下只有 Discoverable Credential(Resident Key)是可用的,non-discoverable credentials无论是使用 Windows 自带的 SSH 还是用 SK SSH Agent 转发均无法使用,原因未知,请不吝赐教。
除此以外还有一个魔改版putty:putty-cac 本人没有测试过。
由于本人并不常用Windows自带的SSH连接服务器,而且开SK SSH Agent还会占用Agent的端口,所以本人日常用的方案是下文中的 SSH with gpg agent,这里只是简单试试。
1 | ssh-keygen -t ed25519-sk -O resident |
将生成的公钥文件 ~/.ssh/id_ed25519_sk.pub
中的内容添加到目标服务器的 authorized_keys
文件中。
然后直接使用 Windows 自带的 SSH 或者开 SK SSH Agent 加载 ~/.ssh/id_ed25519_sk
后就可以使用了。
OTP
建议是别用
推荐使用 KeePass + KeeTrayTOTP 插件,或手机上的Stratum - Authenticator App (https://github.com/stratumauth/app)
OpenPGP
参考Canokey 指南:OTP,FIDO2,PGP 与 PIV
所有命令均在PowerShell中运行
1.生成主密钥
1 | $ gpg --expert --full-gen-key |
2.生成子密钥
1 | $ gpg --fingerprint --keyid-format long -K |
再次查看目前的私钥,可以看到已经包含了这三个子密钥。
1 | gpg --fingerprint --keyid-format long -K |
3.备份 备份 备份
1 | # 公钥 |
把这些文件拿7z打个加密压缩包,密码用KeePass生成一个够长的保存,然后找个你喜欢的网盘存好或者刻张光盘放衣柜里。
4.导入 Canokey
1 | $ gpg --edit-card |
看到ssb>
就可以删掉主密钥了:
1 | gpg --delete-secret-keys 787E848E1A98D086 |
5.使用 Canokey
1 | # 导入公钥 |
5.1 Git Commit 签名
1 | $ git config --global user.signingkey 055917609C9C0D7B # 子密钥中的签名(S)密钥 |
5.2 SSH with gpg agent
首先在%AppData%\gnupg\gpg-agent.conf
中写入(没有就新建一个):
1 | enable-win32-openssh-support |
然后运行gpg -k --with-keygrip
获取 [A] Subkey 的 Keygrip(40位,虽然看着很像上面的fingerprint但是不一样),写入%AppData%\gnupg\sshcontrol
(没有就新建一个),然后开任务管理器,找到gpg-agent.exe
,右键结束进程树。
然后运行gpg --card-status
再把gpg-agent拉起来。
查看 openSSH 读取到的公钥信息,把输出的公钥信息添加到服务器的~/.ssh/authorized_keys
1 | $ ssh-add -L |
Putty设置:
MobaXterm设置:
PIV
CanoKey Canary 3.0.0版本的固件是有bug的,参见:https://docs.canokeys.org/ 但是问题不大,因为PIV一般根本用不到25519
CanoKey有4个可以用的密钥槽(不算82、83):
9A:PIV Authentication
9E:Card Authentication
9C:Digital Signature
9D:Key Management
虽然写了每个密钥槽是做什么的,但是其实你完全不用管,实际使用时大多可以想塞哪儿就塞哪儿。
但是有个容易引发人强迫症的事需要注意,当OpenSC读取卡信息的时候,会以9a->9c->9d->9e
的顺序读,也就是说假如你在9c
槽存了一个CN=Disappear9 's CanoKey
的证书,那么不管后面槽位的证书CN内容是什么,读卡时信息都会一直显示为9c
的CN,直到9a
存了证书。
例如:
1 | yubico-piv-tool -r canokey -a status |
在Thunderbird
中查看时:
所以如果你和我一样容易突然犯强迫症,那么可以自己生成一个给Bitlocker用的证书放9a
。
Bitlocker
新建一个certreqcfg.ini
文件
注意:其中的Subject
,NotBefore
,NotAfter
,这几项是可以随意更改的,剩下的不要动,尤其是有些人(比如我)看到2048位RSA会感觉啊好不安全然后改成4096,证书能生成能导入Bitlocker也能正常读到加锁,然后解密的时候就会突发恶疾智能卡无效导致你只能用恢复密钥解密(至少我在win10 LTSC 21H2 和 win11 LTSC上实验过全是这样)。
1 | [NewRequest] |
运行命令certreq –new certreqcfg.ini certrequest.req
如果没有错误,那么证书就已经成功生成并安装了。
运行命令certmgr.msc
打开证书管理器
右键所有任务->导出
,选择是,导出私钥
,导出pfx文件命名为9a.pfx
。
由于是自签名证书,需要添加注册表允许自签名
以管理员权限运行命令
1 | reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE /v SelfSignedCertificates2 /t REG_DWORD /d "1" |
下载安装 yubico-piv-tool
1 | # 确认是否能检测到Canokey |
至此,Canokey 就可以用于进行 Bitlocker 加密了。在使用 Bitlocker 时,选择“使用智能卡”即可。
清理与善后
0.将导出的证书像对待上文中的GPG证书一样进行备份。
1.删除导出的包含私钥的证书文件9a.pfx
。
2.在 Windows 的证书管理器中删掉生成的证书,证书同时存储在个人
和 中间证书颁发机构
下,要同时删掉。
3.删除申请证书过程中的 ini 和 req 文件。
S/MIME电子邮件加密
准备工作
从 Actalis 申请一个免费的S/MIME证书 参考免费申请S/MIME邮箱证书
安装 Thunderbird
安装 OpenSC
安装 yubico-piv-tool
导入证书:
1 | $ yubico-piv-tool -r canokeys -s 9c -i certificate.p12 -KPKCS12 -a import-key -a import-cert --pin-policy=once |
如果你有不止一个邮箱的证书可以继续导入9d
, 9e
槽位,我们可以在导入命令的后面附加--pin-policy
或--touch-policy
选项覆盖掉默认规则,防止默认规则下9e
槽位可以不经验证被直接使用。详细使用方法参考: https://developers.yubico.com/yubico-piv-tool/Manuals/yubico-piv-tool.1.html
冲突预防
如果你依照上文配置了GPG,在不做修改的情况下GPG会和OpenSC起冲突。
参考: GnuPG and PC/SC conflicts, episode 3
在%AppData%\gnupg\scdaemon.conf
中写入(没有就新建一个):
1 | disable-ccid |
然后开任务管理器,找到gpg-agent.exe
(如有),右键结束进程树。
配置Thunderbird
选择 C:\Program Files\OpenSC Project\OpenSC\pkcs11\opensc-pkcs11.dll
加载后就可以看到Canokey了(重用一下上面的图)
选择与邮箱对应的证书
然后在写信时就可以选择签名/加密了
别人收到以后是这么一个效果:
- 本文作者: Disappear9
- 本文链接: https://thinkalone.win/canokey-canary.html
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!