【问题标题】:Java smartcardio APDU response timeoutJava smartcardio APDU 响应超时
【发布时间】:2016-11-17 00:04:05
【问题描述】:

我正在使用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 版本的不同桌面上生成的工作正常,没有任何例外...

【问题讨论】:

    标签: java exception timeout smartcard pcsc


    【解决方案1】:

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

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

    • 卡指示的 BWI 太小了。这可以通过修改 ATR 来解决(如果可能的话)
    • 卡负责发送 WTX 请求的定时器中断服务程序有问题
    • 阅读器没有正确响应 WTX 请求,因此可以尝试使用不同的阅读器。 (您在其他台式电脑上是否有相同的读卡器型号和相同的固件版本?)

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

    【讨论】:

    • 如何将这样的 WTX 发送到卡上?
    • @codenamezero:误会:卡必须向读卡器请求延长等待时间,所以它会超时并重置连接。
    猜你喜欢
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多