#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.