Драйвер PKCS # 11 запрашивает PIN-код для каждого ключа - PullRequest
4 голосов
/ 09 августа 2011

Я использую драйвер CardOS API от Siemens в качестве драйвера PKCS # 11 для загрузки сертификатов с карты PKI следующим образом:

char[] pin = "123456".toCharArray();
KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(pin);
KeyStore keyStore = KeyStore.Builder.newInstance("PKCS11", Security.getProvider("SunPKCS11-verinice"), pp).getKeyStore();
keyStore.load(null,pin);
keyStore.getKey("key 1", pin);
keyStore.getKey("key 2", pin);

Драйвер запрашивает PIN-код для каждого ключахотя я передаю это в качестве параметра.Есть ли другой способ передать ПИН через API?Есть ли какой-нибудь «кэш ПИН», который я могу активировать?

Ответы [ 3 ]

5 голосов
/ 09 августа 2011

Вы можете использовать пользовательский CallbackHandler, способный обрабатывать PasswordCallback, как описано в разделе 3.1 руководства Java PKCS # 11 .Разумеется, кеширование паролей должно выполняться с должной осторожностью.

2 голосов
/ 09 сентября 2011

Я также работаю с картами CardOS и Siemens.

На карте два PIN-кода.

  1. PIN-код карты. Используется для разблокировки карты и чтения сертификатов. Вы можете обработать этот PIN-код своим обратным вызовом. ПИН-код нужен только один раз.
  2. PIN-код подписи. Используется для доступа к квалифицированному сертификату подписи. Этот PIN-код необходимо вводить для каждой подписи. Диалоговое окно PIN-кода получено из промежуточного программного обеспечения Siemens, и вы не можете закрыть его.

В большинстве случаев оба PIN-кода одинаковы (в противном случае пользователи могут запутаться). У меня также есть карточка без подписи ПИН. С этим я могу подписать без другого ввода PIN-кода. Возможно, вы можете удалить PIN-код подписи или получить карту без PIN-кода подписи.

2 голосов
/ 10 августа 2011

Вы должны спросить об этом у своего поставщика PKCS # 11, в данном случае Siemens. Наверное, с Java ничего не поделаешь.

...