Я пытаюсь получить доступ к смарт-карте в системе 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 (по крайней мере, ошибка не возвращается), я, вероятно, делаю что-то еще неправильно при доступе к хранилищу ключей.Как я могу получить доступ к закрытому ключу?