java.security.Псевдонимы хранилища ключей в JDK 1.6 против IBM 1.5

#java #security #openssl #keystore #jdk1.6

#java #Безопасность #openssl #хранилище ключей #java-6

Вопрос:

У меня проблема с перечисляемым значением, возвращаемым 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 (сборка 1.6.0_22-b04)
64-разрядная серверная виртуальная машина Java HotSpot (TM) (сборка 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?

Спасибо

Комментарии:

1. Насколько мне известно, хранилища ключей не совместимы с двоичными файлами в разных реализациях JVM. (например, SUN java против IBM Java). Я не думаю, что это связано с 1.5 против 1.6

2. Какой SecurityProvider предоставлял хранилище ( Keystore.getProvider() ) в обоих случаях?

Ответ №1:

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

Вы пробовали использовать OpenSSL для проверки вашего хранилища?

Комментарии:

1. > openssl pkcs12 -в /tmp/file.p12 -nokeys -nocerts -info Введите пароль для импорта: MAC Итерация 1 MAC подтверждена, данные зашифрованы PKCS7: (chg мной)***************, Итерация 1 Пакет сертификатов Пакет сертификатов Пакет ключей Пакет сертификатов keytool -list -v -keystore /tmp /file.ошибка keytool p12 (вероятно, непереведенная): java.io.IOException: недопустимый формат хранилища ключей Он работает с openssl, но не работает с инструментом keytool на основе Java

2. Похоже, sun jdk 1.6 не может получить доступ к этому файловому формату p12. Но на самом деле я думал, что PKCS12 — это общий формат файла для предотвращения проблем с совместимостью между форматами хранилищ ключей.

3. Если бы не удалось получить доступ к хранилищам PKCS # 12, вы бы получили исключение при вызове getInstance («PKCS12»), так что это поддерживается, но это немного сложно. Можете ли вы создать хранилище ключей с помощью Sun и открыть с помощью OpenSSL и IBM?

Ответ №2:

вот ответ:

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.