Почему перечисляет семь объектов pksc11-tool, но в Java Keystore есть только один

Когда я делаю в строке 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 ответ

Решение

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

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

Другие вопросы по тегам