前期准备

Tips: 需要安装1.2.4以及以下的版本,高版本不支持Canokey(或者使用Canokey自家的ckman也行)

S/MIME邮箱证书可以看我上一篇文章(1.90$申请 WISeID S/MIME 邮箱证书

导入证书

目前Canokey支持以下几种算法的证书

  • RSA2048
  • NIST P-256
  • NIST P-384

对于固件版本3.0.0以上的Canokey(CanoKey Canary),还支持以下算法的证书

  • RSA3072
  • RSA4096
  • secp256k1
  • Ed25519
  • X25519
  • SM2

Tips: CanoKey 固件版本 3.0.0 仅支持使用 Ed25519 算法对 32 字节数据做签名,仅支持使用内部生成的 X25519 密钥。

安装好ykman后,连接Canokey,进入终端

输入命令

1
ykman -r canokey info

应该能够看到智能卡的相关信息

输入命令

1
ykman -r canokey piv info

应该能看到PIV的相关信息

然后CanoKey一般有4个可用的插槽:

  • 9A:PIV Authentication
  • 9E:Card Authentication
  • 9C:Digital Signature
  • 9D:Key Management

从固件版本 2.0.0 开始,CanoKey 还支持82、83插槽

固件版本 3.0.0 开始,好像还支持Card Capability ContainerCard Holder Unique IdentifierPrinted Information,有邪修玩法用来存VeraCrypt的密钥

需要注意的是,9E插槽的默认PIN策略是不验证

不过这都无所谓,可以通过--pin-policy来设置,具体可以看ykman的命令帮助来使用

这里使用的是9c插槽

首先是导入私钥

Tips: Canokey默认的管理密钥是:010203040506070801020304050607080102030405060708,如果修改了管理密钥需要加上-m参数传入管理密钥

1
ykman -r canokey piv keys import 9c <私钥文件路径>

然后是导入公钥证书

1
ykman -r canokey piv certificates import -v 9c <公钥文件路径>

这里会提示输入PIN,输入PIV的PIN即可,这里的-v参数用于验证证书是否匹配导入的私钥,可有可无

导入Thunderbird

启动Thunderbird,找到端到端加密,点击S/MIME安全设备按钮,然后点击加载按钮,选择浏览按钮

1

找到你安装OpenSC的地方,OpenSC/pkcs11/该目录下有个opensc-pkcs11.dll,选择即可。

正常加载模块后,点击刚刚添加的模块,模块下面有个canokey设备,选择后点击登录,会要求输入PIN

2

登录完成返回到端到端加密页面,点击个人数字签名证书旁边的选择按钮,一般来说会自动找到符合条件的证书,选择后可以点击旁边的测试按钮

如果测试提示颁发者无效,说明可能是缺少中间证书,点击管理S/MIME证书按钮,选择证书颁发机构,导入你的颁发机构的中间证书即可。

参考

https://docs.canokeys.org/zh-hans/userguide/piv/

https://thinkalone.win/canokey-canary.html

https://www.liups.net/2025/10/s-mime-证书签名加密电子邮件/