我正在使用javax.smartcardio
通过CardChannel.transmit(CommandAPDU command)
向智能卡发送APDU命令。
但是,似乎在某处定义了超时,因为当我没有收到来自智能卡的 APDU 响应时,我总是收到 sun.security.smartcardio.PCSCException: Unknown error 0x8010002f
。
当我想要生成 key 需要超过 60 秒并且总是在 60 秒后失败时,就会发生这种情况。用于生成较短位长度 key 的所有其他命令都可以在 60 秒内正常工作。
我试图找出导致此异常的原因,但我真的不知道。 它是 Java 特有的还是我应该看看其他地方?
此行为发生在带有 Java 8 的桌面 Windows 7 x64 上。有趣的是,在具有相同操作系统和 Java 版本的不同桌面上,生成工作正常,没有任何异常...
最佳答案
在协议(protocol)级别(即 T=0 或 T=1),如果超过 ATR BWI 中指示的时隙,卡必须发送所谓的 WTX(等待时间延长)请求。
所以我会考虑这些可能性:
- 卡片上显示的 BWI 太小了。这可以通过修改 ATR 来解决(如果可能的话)
- 该卡负责发送 WTX 请求的定时器中断服务例程有问题
- 阅读器无法正确响应 WTX 请求,因此可能会尝试不同的阅读器。 (您在其他台式电脑上是否有相同型号和相同固件版本的读卡器?)
但是:给出的可能原因均不受操作系统或 Java 版本的影响,所有原因都在读卡器或卡内。
关于Java smartcardio APDU 响应超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38367968/