准备工作
一个Canokey Pigeon,本地gpg密钥。(推荐主密钥+子密钥,仅将子密钥转移到Canokey里。)
如果你还没有准备好GPG密钥,请参考使用GPG 生成SSH密钥替代密码进行SSH登录认证 & 续期GPG密钥
阅读官方文档/社区案例
CanoKeys 使用文档
Canokey 签名和认证应用指南——Dejavu’s Blog
我在Debian12上使用非root账户 依赖systemd,因此需要创建并修改以下文件:
sudo nano /etc/udev/rules.d/69-canokeys.rules
# GnuPG/pcsclite
SUBSYSTEM!="usb", GOTO="canokeys_rules_end"
ACTION!="add|change", GOTO="canokeys_rules_end"
ATTRS{idVendor}=="20a0", ATTRS{idProduct}=="42d4", ENV{ID_SMARTCARD_READER}="1"
LABEL="canokeys_rules_end"
# FIDO2/U2F
# note that if you find this line in 70-u2f.rules, you can ignore it
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="20a0", ATTRS{idProduct}=="42d4", TAG+="uaccess", GROUP="plugdev", MODE="0660"
# make this usb device accessible for users, used in WebUSB
# change the mode so unprivileged users can access it, insecure rule, though
#SUBSYSTEMS=="usb", ATTR{idVendor}=="20a0", ATTR{idProduct}=="42d4", MODE:="0666"
# if the above works for WebUSB (web console), you may change into a more secure way
# choose one of the following rules
# note if you use "plugdev", make sure you have this group and the wanted user is in that group
#SUBSYSTEMS=="usb", ATTR{idVendor}=="20a0", ATTR{idProduct}=="42d4", GROUP="plugdev", MODE="0660"
SUBSYSTEMS=="usb", ATTR{idVendor}=="20a0", ATTR{idProduct}=="42d4", TAG+="uaccess"
修改后
sudo udevadm control --reload-rules && sudo udevadm trigger
安装必要的依赖
sudo apt install libpcsclite1 pcscd scdaemon
否则在执行:gpg --card-status 查看智能卡状态时会出现如下错误
gpg: 从 ‘scdaemon’ 获取版本时出现错误: 没有智能卡守护进程gpg: OpenPGP 卡不可用:没有智能卡守护进程
依赖正常安装后先查看本地密钥列表
xfox@JiaoLoong5-76s:~$ gpg --list-keys
/home/xfox/.gnupg/pubring.kbx
pub rsa4096 2022-10-09 [SC] [有效至:2028-01-31]
7CF9D5312AC4AF470A6F83E052DD030D36987CE3
uid [ 未知 ] x fox mailto:axfox@foxmail.com
sub rsa4096 2022-10-09 [E] [有效至:2025-10-08]
sub ed25519 2024-02-01 [A] [有效至:2028-01-31]
开始转移
转移后的本地计算机的密钥将消失,如果你希望他仍然存在必须提前导出备份)
gpg --expert --edit-key yourmail@mail.com/指纹
key 1 # 勾选第一个子密钥(勾选后回显内容里可见被勾选密钥前有一个*)
keytocard #写入以上勾选的一个密钥
key 1 # 取消勾选
重复以上操作将你需要转移到Canokey的所有子密钥迁移进去。
此时输入save 即可保存你的操作。
特别注意 LOOK at ME!
官方文档要求你修改~/.gnupg/scdaemon.conf
但是,你不应该完全按照docs写的那样操作!
pcsc-driver /usr/lib/libpcsclite.so #Debian用户无需此行!系统缺省路径即为正确路径,如果一定要填写,务必按照你的硬件架构填写正确的库文件路径!
card-timeout 5 #你不写也不是不能用
disable-ccid #Debian12/13无需此行!仅在GnuPG版本超过2.4的发行版上启用!
省流: Debian用户别去改~/.gnupg/scdaemon.conf