Статус: Новичок
Группы: Участники
Зарегистрирован: 29.04.2021(UTC) Сообщений: 5
Сказал(а) «Спасибо»: 2 раз
|
Добрый день! Мы переходим с Java 8 на Java 11, соответственно ставим новую Crypto Pro JCP, которая поддерживается JVM 10 и выше. Теперь установка не требуется, но возник вопрос: как импортировать ключи из pfx файла? Ранее это происходило такой командой (linux): Цитата:/opt/cprocsp/bin/amd64/certmgr -install -pfx -file ./KEYSTORE.pfx -pin PASSWORD Сейчас не наблюдаем утилиты certmgr, входящей в старые версии Crypto Pro JCP. Как в новой версии происходит импорт ключа и сертификатов в HDImageStore? Возможно ли импортировать pfx-файл, прямо из java кода?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,964 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. certmgr - утилита CSP, не JCP. В Java CSP 5.0.40709 и выше и Java CSP 5.0.40615-A и выше появился тип хранилища "PFXSTORE" (JCSP.PFX_STORE_NAME) для импорта PFX формата КриптоПро: Код:
KeyStore ks = KeyStore.getInstance("PFXSTORE", "JCSP");
ks.load(new FileInputStream(pfx_file), pfx_password);
ks.aliases() // перечисление полученного
PrivateKey pk = (PrivateKey)ks.getKey(alias, null); // без пароля
Certificate[] certs = ks.CertificateChain(alias);
Если возникнут проблемы с таким использованием с JCSP, можно использовать certmgr и конвертировать в HDIMAGE (он же HDImageStore). И далее использовать JCP или JCSP. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.04.2021(UTC) Сообщений: 5
Сказал(а) «Спасибо»: 2 раз
|
Спасибо за ответ! При попытке считать вот так: Код:PrivateKey pk = (PrivateKey) ks.getKey(alias, null);
pk всегда равен null. Дебагер показал, что в pfx лежат 2 объекта с одинаковым alias: shot.png (92kb) загружен 20 раз(а).При попытке считать вот так: Код:KeyStore.PrivateKeyEntry entry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias, null);
this.privateKey = entry.getPrivateKey();
Или так: Код:cl_5 entry = (cl_5) keyStore.getEntry(alias, null);
this.privateKey = (PrivateKey) entry.b();
Или так: Код:PrivateKey pk = (GostExchPrivateKey) ks.getKey(alias, null);
Получаю ошибку вида: Код:java.security.KeyStore$TrustedCertificateEntry cannot be cast to class
из-за одинаковых алиасов считывается первый, который содержит только сертификат (имеет тип TrustedCertificateEntry) Можно ли как-то обойти это, т.е. считать только нужный ключ, отбросив первый попавшийсяTrustedCertificateEntry?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,964 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Вам надо проверять на instanceof TrustedCertificateEntry или можно isKeyEntry (если есть ключ - будет true) и isCertificateEntry (если нет ключа - будет true). Отредактировано пользователем 30 апреля 2021 г. 14:02:03(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.04.2021(UTC) Сообщений: 5
Сказал(а) «Спасибо»: 2 раз
|
Я понимаю, что это можно проверить. Проблема в том, что я не могу получить следующий за TrustedCertificateEntry entry, который содержит ключ. При любом обращении по такому алиасу получаю только TrustedCertificateEntry.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,964 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Читайте, например, как KeyStore.Entry: Код:
JCPProtectionParameter parameter = new JCPProtectionParameter(null);
KeyStore.Entry entry = hdImage.getEntry(alias, parameter);
Потом проверяйте entry на instanceof. Отредактировано пользователем 30 апреля 2021 г. 15:46:54(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.04.2021(UTC) Сообщений: 5
Сказал(а) «Спасибо»: 2 раз
|
Вы не поняли вопроса, взгляните на картинку приложенную выше. Там видно, что под ОДНИМ и тем же алиасом лежат ДВЕ сущности, первая TrustedCertificateEntry, вторая PrivateKeyEntry. И как бы я не пытался достать по этому алиасу приватный ключ, я ВСЕГДА получаю первую доступную сущность TrustedCertificateEntry! Такого быть не должно, что бы под одним алиасом в хранилище лежало более одной сущности. Скорее всего это ошибка ПО, с помощью которого создавали pfx файл. Код:KeyStore.Entry entry = keyStore.getEntry(alias, null);
if (entry instanceof KeyStore.TrustedCertificateEntry) {
throw new RuntimeException("Неверный тип сущности"); // Это происходит всегда
} else if (entry instanceof KeyStore.PrivateKeyEntry) {
this.privateKey = ((KeyStore.PrivateKeyEntry) entry).getPrivateKey(); // Это - никогда
}
Как решение, можно импортировать в HDImageStore через certmgr, затем удалить серитфикат лежащий под этим алиасом, что бы под этим же алиасом остался только приватный ключ, и экспортирвать в pfx данное изменнённое хранилище. P.S. Не удалось удалить из хранилища сертификат средствами Java, пишет, что это хранилище нельзя изменять
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,964 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Понятно, спасибо, скорее всего, ошибка чтения (не создания pfx). Проверим и устраним. Пока лучше использовать экспорт в HDImageStore. Вопрос: сколько сертификатов в pfx? Судя по картинке, образовались 3 элемента. Отредактировано пользователем 1 мая 2021 г. 12:38:13(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.04.2021(UTC) Сообщений: 5
Сказал(а) «Спасибо»: 2 раз
|
Было 2 сертификата: 1-ая сущность - наш сертификат (алиас ФПКА) 2-ая сущность - сертификат МинКомСвязи 3-ая сущность - наш сертификат + приватный ключ (алиас ФПКА) Не вижу в новой версии утилиты для экспорта в HDImageStore (certmgr), подскажите пожалуйста, теперь это делается программно? Отредактировано пользователем 5 мая 2021 г. 10:49:08(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,964 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Автор: cucumber_and_koala_5 Не вижу в новой версии утилиты для экспорта в HDImageStore (certmgr), подскажите пожалуйста, теперь это делается программно? В каждом дистрибутиве Крипто-Про CSP (не JCP) есть утилита certmgr. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close