Java smartcardio APDU响应超时

时间:2016-07-14 07:22:24

标签: java exception timeout smartcard pcsc

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

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

当我想要生成超过60秒的密钥并且在60秒后它总是失败时,就会发生这种情况。用于生成少于60秒的密钥长度的密钥的每个其他命令都可以正常工作。

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

此行为在桌面Windows 7 x64上使用Java 8.在具有相同操作系统和Java版本生成的不同桌面上有趣的是,没有任何例外情况可以正常工作...

1 个答案:

答案 0 :(得分:1)

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

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

  • 卡片所示的BWI太小了。这可以通过修改ATR(如果可能的话)来修复
  • 该卡存在负责发送WTX请求的定时器中断服务程序的问题
  • 读者对WTX请求没有正确回应,因此可能会尝试不同的读者。 (在其他台式机上,您是否拥有相同固件版本的读卡器型号?)

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