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

Уведомление

Icon
Error

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

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый вечер! На удаленном сервере есть открытый сертификат с расширением cer и контейнер закрытого ключа cont.000, в котором есть 6 файлов с расширением key
Команда:
Код:
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -verifycontext -fqcn

Возвращает:
Код:
CSP (Type:80) v5.0.10003 KC1 Release Ver:5.0.11455 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 11834131
\\.\HDIMAGE\new_cont
\\.\HDIMAGE\cont
OK.
Total: SYS: 0.000 sec USR: 0.010 sec UTC: 0.030 sec
[ErrorCode: 0x00000000]

Появилась необходимость подписывать данным ключом http запросы партнера. Вот фрагмент, который нам предоставил партнер:
Код:
Signature verifier = Signature.getInstance(signAlgorithm, JCP.PROVIDER_NAME); 
// signAlgrotihm по умолчанию GOST3411_2012_256withGOST3410_2012_256
verifier.initSign(privateKey); 
// privateKey - ключ подписания, по которому с помощью сертификата будет проверена подпись
verifier.update(payload); // payload - byte[] тело запроса, готовый json
verifier.sign() // результат этого действия закодировать в base64 и записать в хедер Signature

Вопрос, собственно, следующий - могу ли я как-то выгрузить контейнер закрытого ключа себе локально (или на другой внешний сервер), чтобы потом в джаве сделать подпись? Пока что выгрузил сам cer файл с удаленного сервера, и попробовал преобразовать его в cert store:
Код:
keytool.exe -providerpath libs/JCP.jar;libs/ASN1P.jar;libs/asn1rt.jar;libs/forms_rt.jar -provider ru.CryptoPro.JCP.JCP -import -file client.cer -alias firstCA -keystore trust.store -storepass 123 -storetype CertStore

Далее обращался к новому файлу из джавы, как к сущности сертификата, и все нормально подтягивалось (объект не null):
Код:
Security.addProvider(new JCP());
val keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
val file = new File("C:\\crypto\\trust.store");
keyStore.load(new FileInputStream(file), new char[]{'1', '2', '3'});
val certificate = keyStore.getCertificate("firstCA");
keyStore.store(new FileOutputStream(file), new char[]{'1', '2', '3'});

Но когда пытаюсь достать приватный ключ, который мне и нужен, по сути, то тут уже объект null, что логично, наверное:
Код:
Security.addProvider(new JCP());
val keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
val file = new File("C:\\crypto\\trust.store");
keyStore.load(new FileInputStream(file), new char[]{'1', '2', '3'});
val privateKey = (PrivateKey) keyStore.getKey("firstCA", new char[]{'1', '2', '3'});

Могу ли я через keytool (или аналог) собрать все 6 файлов key и один cer в один store, и способом, написанном выше на джаве, обратиться к файлу, чтобы получить и сертификат, и приватный ключ? Или может это вообще не так делается? Ну, по крайне мере, ощущается, что то-то делаю не так... Возможно, мне нужно в джаве удаленно коннектиться к серверу с ключами, и как-то через терминал прописывать команды от csptest, хотя звучит, как бред. Либо же нужно развернуть сервис, который бы подписывал переданный json, прямо на этом сервере с ключами. В общем, можете подсказать, куда копать? Или, возможно, у вас будет уже готовое решение.
Команды, которыми генерили ключи:
Код:
/opt/cprocsp/bin/amd64/csptest -minica -root -cont '\\.\HDIMAGE\$A' -provtype 80 -issuer 'CN=CF, O=Axd, L=Moscow, C=RU' -dn 'CN=CF, O=Axd, L=Moscow, C=RU' -until 365 -store uMy -certusage '1.3.6.1.5.5.8.2.2,1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.1'
/opt/cprocsp/bin/amd64/csptest -keyset -check -cont '\\.\HDIMAGE\$A'
/opt/cprocsp/bin/amd64/certmgr -export -store uMy -dest $A.cer
/opt/cprocsp/bin/amd64/csptest -keyset -cont '\\.\HDIMAGE\$A' -keytype exchange -impcert $A.cer
/opt/cprocsp/bin/amd64/csptest -keyset -check -cont '\\.\HDIMAGE\$A

Заранее извиняюсь за свою тупость
Offline Андрей *  
#2 Оставлено : 22 июня 2024 г. 1:26:09(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,995
Мужчина
Российская Федерация

Сказал «Спасибо»: 608 раз
Поблагодарили: 2355 раз в 1851 постах
Автор: kamisamka Перейти к цитате

Появилась необходимость подписывать данным ключом http запросы партнера.


Здравствуйте.

Значит есть софт, который запросы создает?
Вот в это приложение и встраивать работу с контейнером.

А по проделанному с сертификатом - бесполезно, в сертификате открытый ключ.
Закрытый ключ в контейнере.
Техническую поддержку оказываем тут
Наша база знаний
Offline kamisamka  
#3 Оставлено : 22 июня 2024 г. 1:44:20(UTC)
kamisamka

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

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

Сказал(а) «Спасибо»: 1 раз
Если я правильно вас понял, то софт, который запросы создает - это то, что мне нужно реализовать. Т.е. примерно так это выглядит:
1) есть сервис партнера, который ожидает данные от нас, мы им отправляем json с данными юзера
2) есть наш сервис, который будет эти запросы от юзера отсылать в сервис партнера, но они ожидают не просто json с данными, но и подпись этих данных
3) есть отдельный сервер, на котором находятся сертификат + контейнер. С их помощью наш сервис и должен делать подпись

Автор: Андрей * Перейти к цитате
Значит есть софт, который запросы создает?
Вот в это приложение и встраивать работу с контейнером.

Учитывая это, здесь имеете ввиду про наш сервис, или про сервис партнера? Если про наш, то есть проблема, что контейнер на другом сервере находится

Автор: Андрей * Перейти к цитате
А по проделанному с сертификатом - бесполезно, в сертификате открытый ключ.
Закрытый ключ в контейнере.

Да, понял, т.е. подобное с контейнером не получится сделать? Видимо, нет, звучит, как небезопасно (ведь cer файл я просто копировал на локальный комп с удаленного сервера)

Отредактировано пользователем 22 июня 2024 г. 1:47:07(UTC)  | Причина: Не указана

Offline Андрей *  
#4 Оставлено : 22 июня 2024 г. 3:09:50(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,995
Мужчина
Российская Федерация

Сказал «Спасибо»: 608 раз
Поблагодарили: 2355 раз в 1851 постах
если контейнер не там, где отправка запроса (web-клиент) - значит необходимо реализовать передачу запроса в то приложение,
которое имеет доступ к контейнеру и вернёт значение signature.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
kamisamka оставлено 22.06.2024(UTC)
Offline kamisamka  
#5 Оставлено : 22 июня 2024 г. 3:13:35(UTC)
kamisamka

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей * Перейти к цитате
если контейнер не там, где отправка запроса (web-клиент) - значит необходимо реализовать передачу запроса в то приложение,
которое имеет доступ к контейнеру и вернёт значение signature.

Ну да. Видимо, что-то подобное придется делать, спасибо!
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.