Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline chur  
#1 Оставлено : 17 января 2014 г. 16:58:53(UTC)
chur

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 17 января 2014 г. 17:30:25(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,001
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 713 раз в 673 постах
Здравствуйте. JCP не поддерживает PKCS12.
Offline chur  
#3 Оставлено : 17 января 2014 г. 17:44:49(UTC)
chur

Статус: Участник

Группы: Участники
Зарегистрирован: 17.01.2014(UTC)
Сообщений: 19
Российская Федерация
Откуда: Saint-Petersburg

А то я не знаю что JCP не поддерживает PCKS12, вопрос был не в этом, прочитайте внимательнее, pls.
Offline chur  
#4 Оставлено : 17 января 2014 г. 17:53:08(UTC)
chur

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: изменил форматирование

Offline Евгений Афанасьев  
#5 Оставлено : 20 января 2014 г. 19:36:18(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,001
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 713 раз в 673 постах
Совместимость ключей между JCP и BC не проверялась и никак не тестировалась. Например, экспортировать закрытый ключ в блобе из JCP нельзя. Если очень интересно, попробуйте использовать, например, класс PrivateKeySpec (ru.CryptoPro.JCP.Key), но не факт, что что-то получится.
Offline chur  
#6 Оставлено : 20 января 2014 г. 21:42:42(UTC)
chur

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: + вопрос о копировании

Offline cross  
#7 Оставлено : 21 января 2014 г. 13:19:13(UTC)
Анатолий Беляев

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Экспорт закрытого ключа в открытом виде невозможен. Перенести можно просто копированием контейнеров.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.