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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline cucumber_and_koala_5  
#1 Оставлено : 29 апреля 2021 г. 15:12:56(UTC)
cucumber_and_koala_5

Статус: Новичок

Группы: Участники
Зарегистрирован: 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 кода?
Offline Евгений Афанасьев  
#2 Оставлено : 29 апреля 2021 г. 17:11:15(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 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.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
cucumber_and_koala_5 оставлено 30.04.2021(UTC)
Offline cucumber_and_koala_5  
#3 Оставлено : 30 апреля 2021 г. 13:49:06(UTC)
cucumber_and_koala_5

Статус: Новичок

Группы: Участники
Зарегистрирован: 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?
Offline Евгений Афанасьев  
#4 Оставлено : 30 апреля 2021 г. 14:01:12(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Вам надо проверять на instanceof TrustedCertificateEntry или можно isKeyEntry (если есть ключ - будет true) и isCertificateEntry (если нет ключа - будет true).

Отредактировано пользователем 30 апреля 2021 г. 14:02:03(UTC)  | Причина: Не указана

Offline cucumber_and_koala_5  
#5 Оставлено : 30 апреля 2021 г. 14:09:37(UTC)
cucumber_and_koala_5

Статус: Новичок

Группы: Участники
Зарегистрирован: 29.04.2021(UTC)
Сообщений: 5

Сказал(а) «Спасибо»: 2 раз
Я понимаю, что это можно проверить.
Проблема в том, что я не могу получить следующий за TrustedCertificateEntry entry, который содержит ключ. При любом обращении по такому алиасу получаю только TrustedCertificateEntry.
Offline Евгений Афанасьев  
#6 Оставлено : 30 апреля 2021 г. 15:32:42(UTC)
Евгений Афанасьев

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

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

Offline cucumber_and_koala_5  
#7 Оставлено : 1 мая 2021 г. 11:27:23(UTC)
cucumber_and_koala_5

Статус: Новичок

Группы: Участники
Зарегистрирован: 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, пишет, что это хранилище нельзя изменять
Offline Евгений Афанасьев  
#8 Оставлено : 1 мая 2021 г. 12:18:42(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Понятно, спасибо, скорее всего, ошибка чтения (не создания pfx). Проверим и устраним. Пока лучше использовать экспорт в HDImageStore.
Вопрос: сколько сертификатов в pfx? Судя по картинке, образовались 3 элемента.

Отредактировано пользователем 1 мая 2021 г. 12:38:13(UTC)  | Причина: Не указана

Offline cucumber_and_koala_5  
#9 Оставлено : 5 мая 2021 г. 9:25:06(UTC)
cucumber_and_koala_5

Статус: Новичок

Группы: Участники
Зарегистрирован: 29.04.2021(UTC)
Сообщений: 5

Сказал(а) «Спасибо»: 2 раз
Было 2 сертификата:
1-ая сущность - наш сертификат (алиас ФПКА)
2-ая сущность - сертификат МинКомСвязи
3-ая сущность - наш сертификат + приватный ключ (алиас ФПКА)

Не вижу в новой версии утилиты для экспорта в HDImageStore (certmgr), подскажите пожалуйста, теперь это делается программно?

Отредактировано пользователем 5 мая 2021 г. 10:49:08(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#10 Оставлено : 5 мая 2021 г. 10:48:42(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Автор: cucumber_and_koala_5 Перейти к цитате
Не вижу в новой версии утилиты для экспорта в HDImageStore (certmgr), подскажите пожалуйста, теперь это делается программно?

В каждом дистрибутиве Крипто-Про CSP (не JCP) есть утилита certmgr.

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
cucumber_and_koala_5 оставлено 05.05.2021(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.