2016-07-14 41 views
0

我使用javax.smartcardio通過CardChannel.transmit(CommandAPDU command)發送APDU命令給智能卡。的Java smartcardio APDU響應超時

然而似乎是在某個地方定義爲我總是sun.security.smartcardio.PCSCException: Unknown error 0x8010002f當我不收到來自智能卡APDU響應超時。

它正在發生的事情時,我想生成密鑰這需要超過60秒,60秒後它總是失敗。用於生成小於60秒的較少位長的密鑰的其他每個命令都可以正常工作。

我試圖找到是什麼原因造成這種異常,但我真的不知道。 它是Java的具體還是我應該找別的地方?

此行爲是在桌面上的Windows 7 64位系統與Java 8.什麼是不同的桌面使用相同的操作系統和Java版本生成的有趣的,沒有任何異常正常工作......

回答

1

在協議的水平(即T = 0或T = 1),如果卡超出了ATR的BWI所指示的時隙,則該卡必須發送所謂的WTX(等待時間延長)請求。

所以我會考慮這些可能性:

  • 由卡表示的BWI簡直是太小了。這可能通過修改ATR(如果可能的話)
  • 該卡具有與定時器中斷服務程序負責發送出WTX請求
  • 讀者不正確的WTX請求做出響應的一個問題是固定的,所以可能會嘗試不同的讀者。 (你有沒有與其他臺式機相同的固件版本相同的閱讀器模式?)

但是:沒有給出是由操作系統或Java版本的影響的可能原因,所有的要麼是閱讀器內或卡內。

+0

你怎麼發出這樣WTX的卡? – codenamezero

+0

@codenamezero:誤區一:卡有要求的等待時間延長的讀者,所以它確實超時和重置連接。 – guidot