Тайм-аут ответа Java smartcardio APDU

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

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

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

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

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


person user1563721    schedule 14.07.2016    source источник


Ответы (1)


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

Поэтому я бы рассмотрел эти возможности:

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

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

person guidot    schedule 14.07.2016
comment
Как отправить такой WTX на карту? - person codenamezero; 03.02.2017
comment
@codenamezero: Недоразумение: карта должна запросить у считывателя продление времени ожидания, поэтому она делает тайм-аут и сбрасывает соединение. - person guidot; 03.02.2017