您好,感谢您花时间阅读本文。
问题:
我有 4 个具有相同型号和名称的令牌设备,我依靠插槽 ID(和序列号)来识别要使用哪一个。 5 个月无故障运行后,我们不得不重新启动服务器(计划维护),然后发现插槽 ID 已更改。
TOKEN BEFORE NOW USB PORT
Token 1 Slot 0 Slot 1 0
Token 2 Slot 1 Slot 0 1
Token 3 Slot 2 Slot 3 2
Token 4 Slot 3 Slot 2 3
尝试解决该问题的步骤:
拔下所有设备并仅插入“令牌 1”可获得插槽 0,但是只要我插入“令牌 2”,它就会更改为插槽 1,并且“令牌 2”将保留为插槽 0,而令牌 1 将保留为插槽 1。
我一直在尝试重新启动 udev 系统,看看它是否与初始化顺序有关,但没有任何区别。在网上查找,似乎重新启动 udev 并不总是能解决 USB 问题(https://askubuntu.com/a/178078)。
重新启动与令牌、opensc 或 usb 关联的每个服务都没有任何区别。
我想要实现的目标:
我正在使用 openssl 签署一些文件。它会根据用户的不同而改变令牌。因此我使用:
openssl [ARGS] -inkey slot_X-id_XXXXXXXXXXXXXXXX [MORE ARGS]
我必须更新插槽以反映每个用户。这只是一个小问题,我每 6 个月处理一次(当我们进行定期维护时),但我想通过序列号或一致的方式引用令牌来插入/拔出设备并获得正确的插槽顺序。
我知道有一个 URI 方案允许进入 inkey 参数(https://www.rfc-editor.org/rfc/rfc7512),但我还没能让它工作。
我也欢迎任何能帮助我解决此问题的信息。
额外信息: 我认为这并不重要,但它在这里:
**Server:**
OS: Linux (Ubuntu Server 14.06)
**Tokens:**
Slot 0 (0x0): AKS ifdh [eToken 5110 SC] 01 00
token label : MyDevice
token manufacturer : SafeNet, Inc.
token model : eToken
token flags : rng, login required, PIN initialized, token initialized, other flags=0x200
hardware version : 12.0
firmware version : 12.0
serial num : XXXXXXXX
**Inside each Token:**
Using slot 0 with a present token (0x0)
Certificate Object, type = X.509 cert
label:
Certificate Object, type = X.509 cert
label:
Certificate Object, type = X.509 cert
label: le-XXXXXXXX-XXXX-XXXX-XXXXX-XXXXXXXXXXXX
ID: XXXXXXXXXXXXXXXX
**OpenSSL Engine config**
[openssl_def]
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/engines/engine_pkcs11.so
MODULE_PATH = /usr/lib/libeTPkcs11.so
来自 lipb11 邮件列表的相关信息,关于插槽 ID 不是永久的,以允许热插拔 https://sourceforge.net/p/opensc/mailman/message/31235423/