Java smartcardio APDU 响应超时



我正在使用javax.smartcardio通过CardChannel.transmit(CommandAPDU command)将APDU命令发送到智能卡。

但是,似乎在某处定义了一个超时,因为当我没有收到来自智能卡的 APDU 响应时,我总是会得到sun.security.smartcardio.PCSCException: Unknown error 0x8010002f

当我想生成需要 60 秒以上并且总是在 60 秒后失败的密钥时,就会发生这种情况。用于生成比特长度较小的密钥的所有其他命令,耗时不到 60 秒,工作正常。

我试图找到导致此异常的原因,但我真的不知道。它是特定于 Java 还是我应该寻找其他地方?

此行为在带有Java 8的桌面Windows 7 x64上存在。在具有相同操作系统和 Java 版本生成的不同桌面上有趣的事情工作正常,没有任何例外......

在协议级别(即 T=0 或 T=1),如果卡超过 ATR 的 BWI 中指示的时间段,则卡必须发送所谓的 WTX(等待时间延长)请求。

所以我会考虑这些可能性:

  • 卡指示的BWI实在太小了。这可以通过修改 ATR 来解决(如果可能)
  • 卡负责发送 WTX 请求的计时器中断服务例程出现问题
  • 读取器未正确响应 WTX 请求,因此可能会尝试其他读取器。(您是否在其他台式 PC 上具有相同的读卡器型号和相同的固件版本?

但是:给出的任何可能原因都不受操作系统或Java版本的影响,所有这些都在读卡器或卡内。

最新更新