Как получить доступ к смарт-карте в Java на Linux? - PullRequest
5 голосов
/ 21 июля 2010

Я пытаюсь получить доступ к смарт-карте в системе Linux на виртуальной машине.Устройство USB сопоставлено с виртуальной машиной и может быть перечислено через lsusb (ID 076b: 3021 OmniKey AG CardMan 3121).Я могу получить доступ к смарт-карте через pkcs11-tool и pkcs15-tool.Также Firefox может получить доступ к токену через библиотеку /usr/lib/opensc-pkcs11.so.

Но когда я пытаюсь получить доступ к смарт-карте из Java, возвращается пустое хранилище ключей.Я использую следующую конфигурацию для поставщика sun.security.pkcs11.SunPKCS11.

name = PKCS11Test
library = /usr/lib/opensc-pkcs11.so
slot = 0

При использовании другого слота (я пробовал слот 0-15), я получаю ошибки CKR_PIN_INCORRECT или "PKCS11 not found".В своих тестах я загружаю хранилище ключей следующим образом:

char[] pin = "123456".toCharArray();
KeyStore ks = KeyStore.getInstance("PKCS11", p);
ks.load(null, pin);

С другой стороны, инструмент pkcs11 возвращается для слота 0:

Slot 0 CCID Compatible<br> token model: PKCS#15 emulated

AsКажется, что Java обращается к карте в слоте 0 (по крайней мере, ошибка не возвращается), я, вероятно, делаю что-то еще неправильно при доступе к хранилищу ключей.Как я могу получить доступ к закрытому ключу?

1 Ответ

1 голос
/ 10 августа 2010

Хорошо, я нашел решение.

Почему, слот 0 кажется пустым вообще.Слоты 1 и 2 имеют закрытые ключи, но были защищены разными (локальными) PIN-кодами.С помощью инструмента netkey я смог установить локальный PIN-код на глобальный PIN-код.После этого доступ к карте работал без изъянов.

...