我使用Java和IAIK来读取eToken信息。
Module pkcs11Module = Module.getInstance("PKCS11.dll");
pkcs11Module.initialize(null);
Slot[] slotsWithToken = pkcs11Module.getSlotList(Module.SlotRequirement.TOKEN_PRESENT);
log.info("number of slots: {}", slotsWithToken.length);
Token[] tokens = new Token[slotsWithToken.length];
for (int i = 0; i < slotsWithToken.length; i++) {
Session session = null;
TokenInfo tokenInfo = null;
try {
tokens[i] = slotsWithToken[i].getToken();
tokenInfo = tokens[i].getTokenInfo();

这是我得到的信息:
信息只返回‘安全官员PIN最终尝试’真假。然而,我需要知道多少次,我必须重新输入密码,以便我可以通知用户。我在网上搜索过,但没有任何积极的结果。
发布于 2022-03-17 08:29:08
使用标准的pkcs#11调用,无法获得实际重试次数(可能)。
对于用户的引脚,有以下标志:
在SO中,有一些旗子:
您可以检查TokenInfo类。所以你只能在最后一次尝试时显示一个警告。也请参考pkcs#11规范。
然而,正如Alexander在另一个答案中提到的那样,可能存在一个供应商定义的api。
发布于 2022-03-16 14:30:31
在eToken的内部有eTSAPI.dll的辅助API (SAPI)。
您需要调用的方法是:
CK_RV SAPI_GetSlotInfo(
CK_SLOT_ID slotId,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount);您必须查询这四个属性(值是DWORD类型):
#define CKA_SAPI_RETRY_USER 0x80001110
#define CKA_SAPI_RETRY_SO 0x80001111
#define CKA_SAPI_RETRY_USER_MAX 0x80001112
#define CKA_SAPI_RETRY_SO_MAX 0x80001113文档链接。
C#原型看起来就像
[DllImport("eTSAPI.dll", CallingConvention=CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
static extern UInt32 SAPI_GetSlotInfo(UInt32 slotId, [In, Out] CK_ATTRIBUTE[] template, UInt32 count);看看Pkcs11Interop是如何实现GetAttributeValue方法的。
https://stackoverflow.com/questions/71493075
复制相似问题