2016-07-14 11 views
0

javax.smartcardioを使用して、CardChannel.transmit(CommandAPDU command)によってスマートカードにAPDUコマンドを送信しています。Java smartcardio APDU応答タイムアウト

しかし、スマートカードからAPDUレスポンスを受信しないと、常にsun.security.smartcardio.PCSCException: Unknown error 0x8010002fが得られるため、どこかでタイムアウトが定義されているようです。

60秒以上かかるキーを生成したい場合は、60秒後に必ず失敗します。ビット長の短い鍵を生成するための他のコマンドは、60秒以下でよく動作します。

私はこの例外を引き起こしているものを見つけようとしていましたが、実際にはわかりません。 Java固有のものか、別の場所に見える必要がありますか?

この動作は...同じOSとJavaバージョンの世代と異なるデスクトップ上に面白いです、例外なしで正常に動作します何のJava 8とデスクトップのWindows 7のx64上のプロトコルレベルで

答えて

1

(すなわちT = 0でありますまたはT = 1の場合)、ATRのBWIに示されているタイムスロットを超えると、カードはいわゆるWTX(待ち時間延長)要求を送信する必要があります。

だから私は、これらの可能性を検討する:カードで示さ

  • BWIはあまりにも小さいです。これは、可能であればATRを修正することで解決される可能性があります。
  • カードにWTX要求を送信するタイマー割り込みサービスルーチンに問題があります。
  • リーダーがWTX要求に正しく応答しない別のリーダーが試される可能性があります。 (他のデスクトップPCに同じファームウェアバージョンの同じリーダーモデルがありますか?)

ただし、指定された理由はオペレーティングシステムまたはJavaバージョンの影響を受けません。またはカード内に配置することができます。

+0

どのようにWTXをカードに送信しますか? – codenamezero

+0

@codenamezero:誤解:カードは、読者に待ち時間延長を依頼しなければならないため、タイムアウトして接続をリセットします。 – guidot

関連する問題