Почему перечисляет семь объектов 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":
- JDK 7 PKCS#11 Справочное руководство
- Справочное руководство по JDK 8 PKCS#11
- JDK 9 PKCS#11 Справочное руководство
- JDK 10 PKCS#11 Справочное руководство
Выберите правильное руководство для своей версии JAVA и ознакомьтесь с главой "Требования к KeyStore". Вы обнаружите, что поставщик SunPKCS11 возвращает псевдонимы только для пар сертификатов и соответствующих им закрытых ключей (это одна запись в вашем случае) и игнорирует все другие объекты.