Статус: Участник
Группы: Участники
Зарегистрирован: 17.01.2014(UTC) Сообщений: 19 Откуда: Saint-Petersburg
|
У меня есть ключ и подписанный сертификат (всё ГОСТ конечно) в формате PKCS12. Есть необходимость без UI загрузить всё это хозяйство в хранилище HDImageStore. Загрузка происходит корректно, но при попытке записать ключ и цепочку сертификатов получаю ошибку: Цитата: 2014-01-17 11:28:04.074 [ERROR] (main:PCKS12Loader) key is not GostPrivateKey or GostExchPrivateKey java.security.KeyStoreException: key is not GostPrivateKey or GostExchPrivateKey at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineSetKeyEntry(Unknown Source) at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineSetKeyEntry(Unknown Source) at java.security.KeyStore.setKeyEntry(KeyStore.java:909) ....
Ключ совершенно точно в формате ГОСТ3410. Вопрос 1: какие шаги необходимо выполнить чтобы создать инстанс класс GostPrivateKey используя существующий java.security.Key? Вопрос 2: если я не могу создать и заполнить GostPrivateKey, то как можно (без UI, так что вариант с ControlPanel.sh не катит) добавить в ключевое хранилище имеющийся в моем распоряжении ключ. Например я могу распотрошить p12/pfx на составные части в PEM/DER с помощью OpenSSL, но что дальше? UPD: я использую сборку 2.0.37027 Отредактировано пользователем 17 января 2014 г. 16:59:52(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,001 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 713 раз в 673 постах
|
Здравствуйте. JCP не поддерживает PKCS12. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.01.2014(UTC) Сообщений: 19 Откуда: Saint-Petersburg
|
А то я не знаю что JCP не поддерживает PCKS12, вопрос был не в этом, прочитайте внимательнее, pls.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.01.2014(UTC) Сообщений: 19 Откуда: Saint-Petersburg
|
Давайте ещё раз и поподробнее: Загружаем полученный из УЦ файл p12. Для этого используем BouncyCastle: Код:
KeyStore store = KeyStore.getInstance("PKCS12", "BC");
try (FileInputStream fis = new FileInputStream(file)) {
store.load(fis, password.toCharArray());
}
alias = store.aliases().nextElement();
privateKey = store.getKey(alias, password.toCharArray());
chain = store.getCertificateChain(alias);
Пытаемся поместить его содержимое в JCP: Код:
KeyStore ks = KeyStore.getInstance("HDImageStore", "JCP");
ks.load(null, null);
ks.setKeyEntry(alias, privateKey, null, chain);
ks.store(null, null);
try (FileOutputStream fos = new FileOutputStream(certStore)) {
ks.store(fos, password.toCharArray());
}
однако как и была сказано выше при вызове ks.setKeyEntry(alias, privateKey, null, chain); происходит exception: Цитата: 2014-01-17 11:28:04.074 [ERROR] (main:PCKS12Loader) key is not GostPrivateKey or GostExchPrivateKey java.security.KeyStoreException: key is not GostPrivateKey or GostExchPrivateKey at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineSetKeyEntry(Unknown Source) at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineSetKeyEntry(Unknown Source) at java.security.KeyStore.setKeyEntry(KeyStore.java:909) ....
Класс загруженного ключа org.bouncycastle.jcajce.provider.asymmetric.ecgost.BCECGOST3410PrivateKey. Вопрос N1: как перегнать ключ в GostPrivateKey? Отредактировано пользователем 17 января 2014 г. 17:56:58(UTC)
| Причина: изменил форматирование
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,001 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 713 раз в 673 постах
|
Совместимость ключей между JCP и BC не проверялась и никак не тестировалась. Например, экспортировать закрытый ключ в блобе из JCP нельзя. Если очень интересно, попробуйте использовать, например, класс PrivateKeySpec (ru.CryptoPro.JCP.Key), но не факт, что что-то получится. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.01.2014(UTC) Сообщений: 19 Откуда: Saint-Petersburg
|
Автор: afev Совместимость ключей между JCP и BC не проверялась и никак не тестировалась. Например, экспортировать закрытый ключ в блобе из JCP нельзя. Если очень интересно, попробуйте использовать, например, класс PrivateKeySpec (ru.CryptoPro.JCP.Key), но не факт, что что-то получится. Интересно - а вообще программно можно как-то вытащить private key из JCP скажем в DER с тем, чтобы потом его поместить в другой JCP контейнер (другого пользователя или на другой машине)? Вдогонку: Или можно перенести ключи просто копированием файлов? Отредактировано пользователем 20 января 2014 г. 21:57:33(UTC)
| Причина: + вопрос о копировании
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Экспорт закрытого ключа в открытом виде невозможен. Перенести можно просто копированием контейнеров. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close