Canokey使用PIV解锁bitlocker

Windows支持使用智能卡作为bitlocker的解锁设备,自然Canokey也不例外,具体过程如下。

安装yubico-piv-tool

1
2
sudo pacman -S yubico-piv-tool #Archlinux
sudo apt install yubico-piv-tool # Ubuntu

验证能否正常读取:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
yubico-piv-tool -r canokeys -a status

Version: 5.4.0
Serial Number: 【不给看】
CHUID: 【不给看】
CCC: 【不给看】
Slot 9a:
Algorithm: RSA2048
Subject DN: CN=【不给看】
Issuer DN: CN=【不给看】
Fingerprint: 【不给看】
Not Before: Dec 24 08:32:34 2024 GMT
Not After: Dec 24 08:42:33 2123 GMT
PIN tries left: 3

我已经把证书导入了9a插槽,输出结果大致如上。

有一点需要注意。在Windows系统中,如果你之前执行了gpg --card-status查看opengpg模块,那么可能会遇到这种情况:

1
2
3
4
yubico-piv-tool -r canokeys -a status

Failed to connect to yubikey: Error in PCSC call.
Try removing and reconnecting the device.

解决方法很简单,重新插拔Canokey物理密钥,然后再执行即可。猜测执行gpg --card-status后PCSC端口被占用,导致yubico-piv-tool读取智能卡失败。

Linux中也存在类似现象。执行yubico-piv-tool -r canokeys -a status后,第一次运行gpg --card-status会提示gpg: OpenPGP card not available: General error,只需再执行一次gpg --card-status就正常了。

创建证书

创建openssl配置文件。名字随意,比如2.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[ req ]
default_bits = 2048
prompt = no
encrypt_key = no
default_md = sha384
distinguished_name = dn
days=3650

[ dn ]
C=CN
ST=按需输入
L=按需输入
O=按需输入
OU=按需输入
CN=按需输入
emailAddress = 按需输入

解释(参考:使用OpenSSL工具生成CSR文件):

  • C:Country Name,国家名称,例如:CN。(可选)
  • ST:State or Province Name,州或省的名称,例如:JiangSu。(可选)
  • L:Locality Name,城市名称,例如:NanJing。(可选)
  • O:Organization Name,公司名称,例如:CMCC。(可选)
  • OU:Organizational Unit Name,部门名称,例如:06DC-esight。(可选)
  • CN:Common Name,证书使用者的名称,填写访问的具体域名,不支持通配符场景。

保存后,在当前目录执行

1
2
openssl req -new -x509 -config 2.cnf  -keyout server.key -out server.csr -addext extendedKeyUsage=1.3.6.1.4.1.311.67.1.1 -addext keyUsage=keyEncipherment -days 3650
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.csr

即可得到server.pfx文件,这正是我们想要的。

需要注意,上面的配置文件中不要试图用req_extensions把extendedKeyUsage和keyUsage放进配置文件,实测无效。按照Missing X509 extensions with an openssl-generated certificate说法,

Extensions in certificates are not transferred to certificate requests and vice versa

有几种变通方式,本文中使用了 -addext 进行追加。可以输出 server.csr 验证是否成功添加:

1
2
3
4
5
6
7
8
openssl x509 -in server.csr -text -noout 
(节选)
X509v3 extensions:
X509v3 Extended Key Usage:
1.3.6.1.4.1.311.67.1.1
X509v3 Key Usage:
Key Encipherment
X509v3 Subject Key Identifier:

可见 extendedKeyUsageextendedKeyUsage 已经被正确添加到证书中。

导入Canokey

1
2
yubico-piv-tool -r canokeys -s 9a -i server.pfx -KPKCS12 -a import-key -a import-cert #放到了9a插槽里,这个有什么统一规范吗
yubico-piv-tool -r canokeys -a set-chuid # Canokey官方文档建议

至此Canokey就可以插到Windows电脑上用于设置解锁bitlocker了。在Windows系统中,使用自签证书需要修改注册表键值,可以参考Canokey PIV 应用之 Bitlocker 磁盘加密Setting Up BitLocker with YubiKey as Smart Card,讲得很具体。


Canokey使用PIV解锁bitlocker
http://xiaofami.github.io/2024/12/25/canokeypiv/
作者
tccmu
发布于
2024年12月25日
许可协议