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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline dimas303  
#1 Оставлено : 2 мая 2023 г. 22:11:28(UTC)
dimas303

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

Группы: Участники
Зарегистрирован: 02.11.2022(UTC)
Сообщений: 11
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Столкнулся с необходимостью периодически создавать тестовые контейнеры. Решил использовать утилиту keytool, по инструкции для программиста сгенерил ключ и самоподписанный сертификат и записал на носитель. Добавил в команду опцию keyUsage и указал что можно использовать ключ для шифрования. Но это не помогло, подпись и проверка подписи работают, шифровать данные дает, а при расшифровке получаю ошибку:

java.security.invalidkeyexception: signature key is not allowed for this operation

Подскажите пожалуйста, как то можно решить это утилитой keytool?
Offline Евгений Афанасьев  
#2 Оставлено : 4 мая 2023 г. 13:41:48(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
1. Приведите полный стек ошибки. Какая задача выполняется с помощью данного ключа?
2. В некоторых случаях ключ подписи использовать нельзя. С каким алгоритмом вы генерите ключ? Приведите команду.
Offline dimas303  
#3 Оставлено : 4 мая 2023 г. 16:30:34(UTC)
dimas303

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

Группы: Участники
Зарегистрирован: 02.11.2022(UTC)
Сообщений: 11
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
1. Приведите полный стек ошибки. Какая задача выполняется с помощью данного ключа?
2. В некоторых случаях ключ подписи использовать нельзя. С каким алгоритмом вы генерите ключ? Приведите команду.


1.

ru.CryptoPro.CAdES.exception.EnvelopedException: Decoding of encrypted context into stream failed
at ru.CryptoPro.CAdES.EnvelopedSignature.a(Unknown Source)
at ru.CryptoPro.CAdES.EnvelopedSignature.decrypt(Unknown Source)
at ru.CryptoPro.CAdES.EnvelopedSignature.decrypt(Unknown Source)
at ru.xxxxxxx.CryptControl.decrypt(CryptControl.java:84)
at ru.xxxxxxx.CryptControl_ClientProxy.decrypt(Unknown Source)
at ru.xxxxxxx.CryptoResource.decrypt(CryptoResource.java:102)
at ru.xxxxxxx.CryptoResource$quarkusrestinvoker$decrypt_3ae74519d2fa6b211f434de54f0e3e950ce9ae57.invoke(Unknown Source)
at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:141)
at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:145)
at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:576)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: ru.CryptoPro.CAdES.exception.EnvelopedException: Input cipher initiation failed
at ru.CryptoPro.CAdES.pc_1.pc_1.cl_0.<init>(Unknown Source)
at ru.CryptoPro.CAdES.pc_1.pc_1.cl_2.getRecipientOperator(Unknown Source)
at org.bouncycastle.cms.KeyTransRecipientInformation.getRecipientOperator(Unknown Source)
at org.bouncycastle.cms.RecipientInformation.getContentStream(Unknown Source)
... 17 more
Caused by: java.security.InvalidKeyException: Signature key is not allowed for this operation.
at ru.CryptoPro.Crypto.Cipher.TransportCipher.engineInit(Unknown Source)
at java.base/javax.crypto.Cipher.init(Cipher.java:1296)
at java.base/javax.crypto.Cipher.init(Cipher.java:1236)
... 21 more



2.

keytool -J-Dkeytool.compat=true -J-Duse.cert.stub=true \
-providerpath JCP.jar:ASN1P.jar:asn1rt.jar:forms_rt.jar \
-genkey -alias myKey
-keysize 512 \
-provider ru.CryptoPro.JCP.JCP \
-keypass 123456 \
-storetype HDImageStore \
-dname CN=MY_Test,O=CryptoPro,C=RU \
-keystore NONE \
-storepass 1234 \
-keyalg GOST3410_2012_256 \
-sigalg GOST3411_2012_256withGOST3410_2012_256
-ext KeyUsage=digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment
Offline Евгений Афанасьев  
#4 Оставлено : 4 мая 2023 г. 16:58:43(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Для некоторых операция шифрования требуется ключ обмена, а не ключ подписи. Попробуйте при генерации задать
Цитата:

-keyalg GOST3410DH_2012_256

вместо
Цитата:

-keyalg GOST3410_2012_256

и добавьте в -providerpath библиотеку JCryptoP.jar.
Offline dimas303  
#5 Оставлено : 4 мая 2023 г. 19:40:37(UTC)
dimas303

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

Группы: Участники
Зарегистрирован: 02.11.2022(UTC)
Сообщений: 11
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
Для некоторых операция шифрования требуется ключ обмена, а не ключ подписи. Попробуйте при генерации задать
Цитата:

-keyalg GOST3410DH_2012_256

вместо
Цитата:

-keyalg GOST3410_2012_256

и добавьте в -providerpath библиотеку JCryptoP.jar.


все сделал, но в этом случае я получаю ошибку:

keytool error: java.security.NoSuchAlgorithmException: GOST3410DH_2012_256 KeyPairGenerator not available

Я использую jcp-2.0.41940-A + java 17
Offline Евгений Афанасьев  
#6 Оставлено : 4 мая 2023 г. 21:56:41(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Вот тут -provider ru.CryptoPro.JCP.JCP ещё не JCP, а -provider ru.CryptoPro.Crypto.CryptoProvider
Offline dimas303  
#7 Оставлено : 5 мая 2023 г. 12:12:20(UTC)
dimas303

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

Группы: Участники
Зарегистрирован: 02.11.2022(UTC)
Сообщений: 11
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
Вот тут -provider ru.CryptoPro.JCP.JCP ещё не JCP, а -provider ru.CryptoPro.Crypto.CryptoProvider


Не очень понял что Вы имеете ввиду, если заменить класс провайдейра на ru.CryptoPro.Crypto.CryptoProvider, то получаю ошибку:

keytool error: java.security.KeyStoreException: HDIMAGESTORE not found


P.S. Делаю по - Руководство программиста, провайдеры также добавил в java.security

providerpath такой:

-providerpath JCP.jar:JCryptoP.jar:ASN1P.jar:asn1rt.jar:forms_rt.jar

Отредактировано пользователем 5 мая 2023 г. 12:16:57(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#8 Оставлено : 5 мая 2023 г. 12:24:36(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Алгоритм GOST3410DH_2012_256 - алгоритм ключа обмена, реализуется провайдером ru.CryptoPro.Crypto.CryptoProvider. А HDImageStore - имя хранилища, реализуемое провайдером ru.CryptoPro.JCP.JCP. Если keytool использует значение -provider и для генерации, и для сохранения, при том, что провайдеры для этих действий должны быть разные, то да - так работать не будет, разработчики keytool могли это не предусмотреть.
Если нужен именно keytool, можно еще попробовать прописать провайдеры в java.security и выполнить команду без -provider:
security.provider.15=JCP
security.provider.16=Crypto
Нумерацию провайдеров нужно соблюсти. Однако работоспособность не гарантируется.
Если не получится, лучше написать пример, выполняющий эту задачу.
Offline dimas303  
#9 Оставлено : 5 мая 2023 г. 12:50:22(UTC)
dimas303

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

Группы: Участники
Зарегистрирован: 02.11.2022(UTC)
Сообщений: 11
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
Алгоритм GOST3410DH_2012_256 - алгоритм ключа обмена, реализуется провайдером ru.CryptoPro.Crypto.CryptoProvider. А HDImageStore - имя хранилища, реализуемое провайдером ru.CryptoPro.JCP.JCP. Если keytool использует значение -provider и для генерации, и для сохранения, при том, что провайдеры для этих действий должны быть разные, то да - так работать не будет, разработчики keytool могли это не предусмотреть.
Если нужен именно keytool, можно еще попробовать прописать провайдеры в java.security и выполнить команду без -provider:
security.provider.15=JCP
security.provider.16=Crypto
Нумерацию провайдеров нужно соблюсти. Однако работоспособность не гарантируется.
Если не получится, лучше написать пример, выполняющий эту задачу.


убрал -provider, в java.security прописано, но таже ошибка:

keytool error: java.security.KeyStoreException: HDIMAGESTORE not found


ComLine видимо мне тоже не поможет.

Посоветуйте пожалуйста пример из samples, где похожее делается.
Offline Евгений Афанасьев  
#10 Оставлено : 10 мая 2023 г. 11:31:21(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Попробуйте так:
Цитата:

keytool -J-Dkeytool.compat=true -J-Duse.cert.stub=true -providerpath JCP.jar:ASN1P.jar:asn1rt.jar:forms_rt.jar:JCryptoP.jar: -genkey -alias myKey -keysize 512 -provider ru.CryptoPro.JCP.JCP -provider ru.CryptoPro.Crypto.CryptoProvider -keypass 123456 -storetype HDImageStore -dname CN=MY_Test,O=CryptoPro,C=RU -keystore NONE -storepass 1234 -keyalg GOST3410DH_2012_256 -sigalg GOST3411_2012_256withGOST3410_2012_256 -ext KeyUsage=digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment

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