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