Почему перечисляет семь объектов pksc11-tool, но в Java Keystore есть только один - PullRequest
0 голосов
/ 13 декабря 2018

Когда я делаю в строке cmd:

pkcs11-tool --login -O

, я получаю семь объектов, которые находятся на моей смарт-карте, 3 объекта открытого ключа, 3 объекта сертификата и один объект закрытого ключа.

Но когда я пытаюсь сделать то же самое с небольшим Java-кодом, я нахожу только один сертификат:

 String pkcs11Config = "name = SmartCard\nlibrary = opensc-pkcs11.dll\nslot=0";
  ByteArrayInputStream confStream = new ByteArrayInputStream(pkcs11Config.getBytes());
  Provider prov = new sun.security.pkcs11.SunPKCS11(confStream);
  Security.addProvider(prov);
  String pin = "0000000";
  KeyStore cc = KeyStore.getInstance("PKCS11", prov);
  cc.load(null, pin.toCharArray());

  // Look for certificate
  Enumeration aliases = cc.aliases();
  for (Enumeration e = aliases; e.hasMoreElements();) {
    Object alias = aliases.nextElement();
    System.out.println("Alias is : " + alias);
  }

Почему я не нашел открытого ключа или другого сертификата с этим кодом?

1 Ответ

0 голосов
/ 13 декабря 2018

Это стандартное поведение провайдера SunPKCS11 JAVA.Его реализация обычно описывается в «Справочном руководстве по PKCS # 11» :

Выберите правильное руководство для вашей версии JAVA и ознакомьтесь с главой «Требования к KeyStore» .Вы обнаружите, что поставщик SunPKCS11 возвращает псевдонимы только для пар сертификатов и соответствующих им закрытых ключей (это одна запись в вашем случае) и игнорирует все другие объекты.

...