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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline fadeeeka_new  
#1 Оставлено : 5 сентября 2022 г. 10:45:52(UTC)
fadeeeka_new

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

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

Сказал(а) «Спасибо»: 1 раз
Для входа через ЕСИА необходимо в запросе сформировать строку client_secret (она сформирована) и подписать полученную строку с использованием алгоритма подписания data hash с использованием механизмов КриптоПРО CSP и сертификата информационной системы.

Используется КриптоПро JCP для работы на стороне сервера и java 11. В наличие есть сертификат и папка с 6 файлами (header.key, masks.key, masks2.key, name.key, primary.key, primary2.key).

Насколько я понимаю для подписания строки необходимо сделать следующее:

1. в коде создать HDImageStore
2. положить в него сертификат, задав alias
3. сгенерировать ключевую пару и их тоже положить в контейнер, задав alias

Положить и считать сертификат получилось
Код:
keyStore.setCertificateEntry("test", getCertificate());
X509Certificate certificate = (X509Certificate) keyStore.getCertificate("test");
Certificate[] chain = { certificate };


а вот с ключами возникает проблема:

Если для формирования ключа использовать
Код:
KeyPairGenerator keyGen= KeyPairGenerator.getInstance("GOST3410DHEPH");


то возникает ошибка
GOST3410DHEPH KeyPairGenerator not available

Если же попробовать сформировать ключ иначе, то требуется участие пользователя и положить в контейнер ключ не удается

Код:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance(JCP.GOST_DH_2012_256_NAME);
KeyPair pair = keyGen.generateKeyPair();
keyStore.setKeyEntry("private", pair.getPrivate(), null, chain);
PrivateKey key = (PrivateKey) keyStore.getKey("private", null);


Необходимо сформировать ключевую пару без биодатчика и положить в контейнер для дальшейшего использование
Как это сделать?

Offline two_oceans  
#2 Оставлено : 5 сентября 2022 г. 11:35:31(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Добрый день.
Обычно сначала генерируют ключевую пару, создают запрос на сертификат, УЦ выдает сертификат по запросу, потом подписывают закрытым ключом, соответствующим открытому ключу в сертификате. Иногда все операции делают в УЦ (пользователь только приносит носитель и бумажки), иногда используют тестовый УЦ КриптоПро.

Алгоритмы подобраны специально так, чтобы по открытому ключу было очень сложно подобрать закрытый ключ. Поэтому если Вы получили только сертификат, он будет бесполезен без соответствующего закрытого ключа. Сгенерируете еще пару - идете за новым сертификатом. Поэтому очень интересно, какой сертификат Вы считали, если у Вас еще нет ключевой пары? Хотя - у Вас же есть папка с 6 файлами - это и есть контейнер с закрытым ключом. Если речь про Linux ее просто надо поместить туда где HDIMAGE ищет контейнеры и JCP его увидит. Дальше надо просто указывать правильный alias.

Отредактировано пользователем 5 сентября 2022 г. 11:41:21(UTC)  | Причина: Не указана

Offline fadeeeka_new  
#3 Оставлено : 5 сентября 2022 г. 12:35:35(UTC)
fadeeeka_new

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

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

Сказал(а) «Спасибо»: 1 раз
Сертификат получен из CSP, как и папка с 6 файлами. Этот сертификат выгружается в ЕСИА в личный кабинет, чтобы ЕСИА смог узнать, что мы - это мы? т.е. он может быть только один.
Локально установлен Windows
Когда указываю конкретный путь к контейнеру, где эти файлы лежат и пытаюсь получить вообще все alias, возвращается null.

Код:
Enumeration aliases = keyStore.aliases();


Поэтому вообще не могу понять как из 6 файлов получить закрытый ключ, не знаю его alias и не зная как его задать.
Offline two_oceans  
#4 Оставлено : 6 сентября 2022 г. 7:24:01(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Ну вот теперь мы говорим об одном. Путь указываете до самой папки с 6 файлами? У меня предположение, что это надо указывать на 1 уровень выше, так как в хранилище может же быть несколько контейнеров?

Вообще, должна быть "стандартная" папка для считывателя HDIMAGE (или как называется в CSP 5.0 на Windows и CSP 4.0/5.0 на Linux - "считыватель Директория"). Если в нее положить эту папку с 6 файликами (например, с помощью CSP 5.0 скопировать контейнер в считыватель Директория), то ключи должно быть видно и в JCP и в JCSP и в CSP, далее смотрите через графическую панель JCP какой alias.

https://www.cryptopro.ru...&m=133798#post133798
https://www.cryptopro.ru...&m=134645#post134645
https://www.cryptopro.ru...&m=134444#post134444
thanks 1 пользователь поблагодарил two_oceans за этот пост.
fadeeeka_new оставлено 06.09.2022(UTC)
Offline fadeeeka_new  
#5 Оставлено : 6 сентября 2022 г. 16:50:01(UTC)
fadeeeka_new

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

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

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