Псевдонимы java.security.Keystore в JDK 1.6 и IBM 1.5

У меня проблема с возвращаемым значением перечисления KeyStore.aliases();

FileInputStream is = new FileInputStream("/tmp/file.p12");
List<String> aliases = new ArrayList<String>();

KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(is, password.toCharArray());
is.close();

Enumeration<String> e=keystore.aliases();
while(e.hasMoreElements()) {
    // never reaches here because "e" is empty
    System.out.println(e.nextElement().toString());
    i++;
}

С Java версии "1.6.0_22" Java(TM) SE Runtime Environment (сборка 1.6.0_22-b04) Java HotSpot(TM) 64-битный сервер VM (сборка 17.1-b03, смешанный режим)

Я получаю пустой перечислитель

С java версии "1.5.0" Java(TM) 2 Runtime Environment, Standard Edition (сборка pxi32devifx-20100511a (SR11 FP2)) IBM J9 VM (сборка 2.3, J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi3223ifx-20100510 ( JIT включен) J9VM — 20100509_57823_lHdSMr JIT — 20091016_1845ifx7_r8 GC — 20091026_AA) JCL — 20100511a

Я могу получить все псевдонимы.

Как я могу получить все псевдонимы магазина pkcs12 с помощью Sun/Oracle JDK6?

Спасибо


person David    schedule 04.05.2011    source источник
comment
Насколько мне известно, хранилища ключей несовместимы в двоичном формате с различными реализациями JVM. (например, SUN java против IBM Java). Я не думаю, что это связано с 1,5 против 1,6   -  person laher    schedule 04.05.2011
comment
Какой SecurityProvider предоставлял хранилище (Keystore.getProvider()) в обоих случаях?   -  person martijno    schedule 26.06.2012


Ответы (2)


Мне не кажется, что с вашим кодом что-то не так, и я бы подумал, что хранилища ключей PKCS#12 должны быть доступны для чтения во всех версиях всех JRE.

Вы пытались использовать OpenSSL для подтверждения своего магазина?

person David Grant    schedule 04.05.2011
comment
› openssl pkcs12 -in /tmp/file.p12 -nokeys -nocerts -info Введите пароль для импорта: Итерация MAC 1 MAC подтвержден OK PKCS7 Зашифрованные данные: (изменено мной)************** *, Итерация 1 Пакет сертификатов Пакет сертификатов Пакет ключей Пакет сертификатов keytool -list -v -keystore /tmp/file.p12 ошибка keytool (вероятно, непереведенная): java.io.IOException: недопустимый формат хранилища ключей Он работает с openssl, но не работа с инструментом на базе Java keytool - person David; 04.05.2011
comment
Похоже, что sun jdk 1.6 не может получить доступ к этому формату файла p12. Но на самом деле я думал, что PKCS12 был универсальным форматом файлов для предотвращения проблем совместимости между форматами хранилищ ключей. - person David; 04.05.2011
comment
Если бы он не мог получить доступ к хранилищам PKCS # 12, вы бы получили исключение при вызове getInstance (PKCS12), поэтому он поддерживается, но немного суетлив. Можете ли вы создать хранилище ключей с помощью Sun и открыть его с помощью OpenSSL и IBM? - person David Grant; 04.05.2011

вот ответ:

http://www-01.ibm.com/support/docview.wss?uid=swg1IZ77005

-- Решение проблемы Этот дефект будет исправлен в:
1.4.2 SR14
5.0.0 SR12
6.0.0 SR9

Метод PKCS SafeContents.getSafeBags( ) был изменен, чтобы определять, когда массив SafeBag имеет значение null, и вместо этого возвращать пустой массив SafeBag. Вызывающие PKCS этого метода готовы обрабатывать пустой массив SafeBag.

person David    schedule 02.09.2011