2016-07-14 3 views
0

Я использую javax.smartcardio для отправки команды APDU на смарт-карту через CardChannel.transmit(CommandAPDU command).Java smartcardio Время отклика APDU

Однако кажется, что есть тайм-аут где-то определенно, поскольку я всегда получаю sun.security.smartcardio.PCSCException: Unknown error 0x8010002f, когда я не получаю ответ APDU со смарт-карты.

Это происходит, когда я хотел бы сгенерировать ключ, который занимает более 60 секунд, и он всегда терпит неудачу через 60 секунд. Каждая другая команда для генерации ключа меньшей длины бит, которая занимает менее 60 секунд, отлично работает.

Я пытался найти причину этого исключения, но я действительно не знаю. Является ли это Java конкретным, или я должен смотреть в другое место?

Такое поведение на рабочем столе Windows 7 x64 с Java 8. Что интересно на другой рабочий стол с той же ОС и генерации версий Java прекрасно работает без каких-либо исключений ...

ответ

1

На уровне протокола (т.е. Т = 0 или T = 1) карта должна отправить запрос так называемого WTX (продление времени ожидания), если он превышает временной интервал, как указано в BWI ATR.

Так что я хотел бы рассмотреть следующие возможности:

  • БВУ указывает карты просто слишком мал. Это может быть исправлено путем изменения ATR (если это возможно)
  • У карты возникла проблема с службой обслуживания прерывания таймера, ответственной за отправку запроса WTX
  • Читатель не отвечает должным образом на запрос WTX, поэтому может быть опробован другой читатель. (У вас одна и та же модель считывателя с той же версией прошивки на других настольных ПК?)

Однако: ни одна из возможных причин не зависит от операционной системы или версии Java, все они либо находятся внутри считывателя или внутри карты.

+0

Как вы отправляете такой WTX на карту? – codenamezero

+0

@codenamezero: Непонимание: карта должна попросить читателя продлить время ожидания, поэтому он выполняет таймаут и перезапускает соединение. – guidot

Смежные вопросы