如何使用 pkcs11-tool 创建插槽?

How can I create a slot using the pkcs11-tool?

我正在尝试在我的应用程序中使用 pkcs11 来访问智能卡。这是 'list-slots' 命令的输出 -

root@penguin:~/src/tools$ pkcs11-tool -L
Available slots:
Slot 0 (0xffffffffffffffff): Virtual hotplug slot
  (empty)

我有两个问题

  1. 我怎样才能模拟一张假卡,让 Slot 0 有一个 token/device 我可以访问。

  2. 我可以创建额外的插槽并向其中添加 tokens/devices 吗?

如果没有,我该怎么做才能将 token/device 添加到可用的插槽 0?

您需要 "module," 一个与特定智能卡接口的动态加载库。如果您的智能卡与 OpenSC 一起工作(例如,PIV 模式下的 Yubikey),您将使用 OpenSC 模块,该模块通常在 Linux 系统上位于 /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so,或在 /Library/OpenSC/lib/opensc-pkcs11.dylib macOS 系统。如果您没有物理智能卡并且只想使用 PKCS#11 API,您可以安装和使用 SoftHSM,它在软件中模拟 PKCS#11 设备。在使用 SoftHSM 之前,您需要对其进行一些配置,以创建必要的插槽。 SoftHSM 模块通常位于 Linux 系统上的 /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so。您需要在每次执行 pkcs11-tool 时指定 --module

以下是如何设置和使用 SoftHSMv2 的示例:

mkdir softhsm
cd softhsm
echo "directories.tokendir = $PWD/" > softhsm2.conf
export SOFTHSM2_CONF=$PWD/softhsm2.conf
pkcs11-tool -L --module /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so

SoftHSMv2 默认有一个插槽。一旦您在第一个插槽中初始化令牌,它将自动添加第二个插槽,依此类推。

$ pkcs11-tool  --module /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so -L
Available slots:
Slot 0 (0x0): SoftHSM slot 0
  token state:   uninitialized
$ pkcs11-tool  --module /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so --init-token --label my_token
Using slot 0 with a present token (0x0)
Please enter the new SO PIN: 
Please enter the new SO PIN (again): 
Token successfully initialized
membrane:~ $ pkcs11-tool  --module /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so -L
Available slots:
Slot 0 (0x0): SoftHSM slot 0
  token label        : my_token
  token manufacturer : SoftHSM project
  token model        : SoftHSM v2
  token flags        : rng, login required, token initialized, other flags=0x20
  hardware version   : 2.0
  firmware version   : 2.0
  serial num         : 5bed215e0df0d1f1
Slot 1 (0x1): SoftHSM slot 1
  token state:   uninitialized

如果您使用的是硬件智能卡,通常会有一组固定的插槽。

我试过上面的方法,但它显示没有可用的插槽,即使有插槽。

    Available slots:
Slot 0 (0x239d88a): SoftHSM slot ID 0x239d88a
  token label        : my_token
  token manufacturer : SoftHSM project
  token model        : SoftHSM v2
  token flags        : login required, rng, token initialized, other flags=0x20
  hardware version   : 2.2
  firmware version   : 2.2
  serial num         : fd57c0a78239d88a
  pin min/max        : 4/255
Slot 1 (0x25a0a789): SoftHSM slot ID 0x25a0a789
  token label        : Test
  token manufacturer : SoftHSM project
  token model        : SoftHSM v2
  token flags        : login required, rng, token initialized, PIN initialized, other flags=0x20
  hardware version   : 2.2
  firmware version   : 2.2
  serial num         : 5c1db319a5a0a789
  pin min/max        : 4/255
Slot 2 (0x2): SoftHSM slot ID 0x2
  token state:   uninitialized


root@ip-172-31-3-199:/usr/lib/x86_64-linux-gnu/softhsm#
total 48
drwxr-xr-x  4 root root  4096 May 25 15:01 ./
drwxr-xr-x 29 root root 32768 May 25 12:37 ../
drwx------  2 root root  4096 May 17 15:22 9dd60893-4135-947d-fd57-c0a78239d88a/
drwx------  2 root root  4096 May 17 14:41 df7b71db-c341-4525-5c1d-b319a5a0a789/
lrwxrwxrwx  1 root root    31 May 25 15:01 libsofthsm2.so -> /usr/lib/softhsm/libsofthsm2.so
lrwxrwxrwx  1 root root    26 May 17 14:40 softhsm2.conf -> /etc/softhsm/softhsm2.conf