【发布时间】:2016-05-03 05:30:44
【问题描述】:
您好,我正在使用 SUN PKCS11 实现使用 USB 加密令牌中的 PKI 证书执行操作
我为特定的 USB 令牌创建了一个提供程序对象,然后调用
Keystore ks = KeyStore.getInstance(PKCS11_KEYSTORE_TYPE,prov);
然后我用
加载它keyStore.load(null, PIN.toCharArray())
PIN 是用户为特定证书输入的 PIN
现在,当由于错误的 PIN 码导致加载失败时,不同的加密令牌的行为会有所不同。 Keystore::load 但是当 PIN 错误时抛出 IOException,
例如。
- Watchdata USB 令牌首先抛出一个对话框,其中包含一条消息“PIN is 错误的。 X 尝试离开”然后抛出 IOException。
- Gemalto 和 Fietian 不抛出对话框,而只抛出一个 IO异常
我想为所有 USB 类型显示 PIN 错误消息,但如果我添加自己的对话框,那么在 WatchData 上我最终会收到 2 个对话框 (1 from Watchdata & 1 of my own).
有没有办法判断错误信息是否已经显示?或者有没有办法抑制显示自己的加密狗上的错误对话框?
【问题讨论】:
-
你好@user93353。您使用的是供应商 PKCS#11 模块(如 Watchdata 的 libwdpkcs_icp.so)还是 opensc-pkcs11.so?
-
@SebB - 使用供应商 PKCS#。
-
在 WatchKey Token Tool* 安装日志中,我看到了有趣的模块:
WDPKCS.dll, WDICP_P11_CCID_v34.dll,...。你在加载哪一个? -
尝试改用
WDICP_P11_CCID_v34.dll。在WDPKCS.dllexport-table 我看到了典型的 PKCS#11 函数 + 一些 Watchdata 的函数 (WD***) -
这个文件在使用
WDPKCS.dll时也可能很有趣:C:\Windows\SysWOW64\WatchData\Watchdata ICP CSP v1.0\WatchSafe.ini。我看到RetryTimes=4,MinPinLen=5,P11Message=1,...。