Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Расшифровка данных, NoSuchAlgorithmException: Algorithm 1.2.643.7.1.1.1.1 not available
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.08.2021(UTC) Сообщений: 3
|
Коллеги, добрый день! Помогите, пожалуйста, разобраться со следующей проблемой. Дано приложение на SpringBoot, jdk11 версия JCP: jcp-2.0.41940-A Библиотеки JCP засунул в classpath Сертификат добавлен в хранилище, закрытый ключ на флешке, все это в коде доступно. Плюс обращаюсь к вэб-сервису по ГОСТовскому SSL(другой сертификат, соответственно) так же через JCP и подключение работает. Далее получаю некоторую зашифрованную строку и ее надо расшифровать закрытым ключом с флешки. Смотрел примеры кода в библиотеке, но они какие то совсем мудреные, вроде как подобная задача должна проще решаться.. Попробовал взять библиотеку bouncycastle (версия 1.69, но пробовал и некоторые более старые - поведение аналогично), получаю исключение о том, что библиотека не подхватила ГОСТовские алгоритмы (вроде как должна, насколько понимаю) Код:
org.bouncycastle.cms.CMSException: exception unwrapping key: cannot create key agreement: Algorithm 1.2.643.7.1.1.1.1 not available
at org.bouncycastle.cms.jcajce.JceKeyTransRecipient.extractSecretKey(Unknown Source) ~[bcpkix-jdk15on-1.69.jar:1.69.00.0]
at org.bouncycastle.cms.jcajce.JceKeyTransEnvelopedRecipient.getRecipientOperator(Unknown Source) ~[bcpkix-jdk15on-1.69.jar:1.69.00.0]
at org.bouncycastle.cms.KeyTransRecipientInformation.getRecipientOperator(Unknown Source) ~[bcpkix-jdk15on-1.69.jar:1.69.00.0]
at org.bouncycastle.cms.RecipientInformation.getContentStream(Unknown Source) ~[bcpkix-jdk15on-1.69.jar:1.69.00.0]
at su.meo.emk.ws.CwClient.test(CwClient.java:133) ~[classes/:na]
at su.meo.emk.EmkApplication.lambda$checkCwVersion$1(EmkApplication.java:54) ~[classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:791) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:775) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:345) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.3.jar:2.5.3]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.3.jar:2.5.3]
at su.meo.emk.EmkApplication.main(EmkApplication.java:17) ~[classes/:na]
Caused by: org.bouncycastle.cms.CMSException: cannot create key agreement: Algorithm 1.2.643.7.1.1.1.1 not available
at org.bouncycastle.cms.jcajce.EnvelopedDataHelper.createKeyAgreement(Unknown Source) ~[bcpkix-jdk15on-1.69.jar:1.69.00.0]
... 12 common frames omitted
Caused by: java.security.NoSuchAlgorithmException: Algorithm 1.2.643.7.1.1.1.1 not available
at java.base/javax.crypto.KeyAgreement.getInstance(KeyAgreement.java:192) ~[na:na]
at org.bouncycastle.jcajce.util.DefaultJcaJceHelper.createKeyAgreement(Unknown Source) ~[bcprov-jdk15on-1.69.jar:1.69.0]
... 13 common frames omitted
Мой код Код:
Security.addProvider(new JCP());
Security.addProvider(new RevCheck());
Security.addProvider(new CryptoProvider());
Security.addProvider(new ru.CryptoPro.ssl.Provider());
ServiceLoader.load(java.security.Provider.class).stream().forEach(provider -> {
log.info("Зарегистрирован провайдер {}", provider.get().getName());
}); //для отладки вывожу все провайдеры
KeyStore keyStore = KeyStore.getInstance(JCP.FLOPPY_STORE_NAME);
keyStore.load(null, null);
var certificate = (X509Certificate) keyStore.getCertificate(alias);
var key = (PrivateKey) keyStore.getKey(alias, keystorePassword.toCharArray()); // сертификат и закрытый ключ, все на месте
var authResponse = this.authenticate(...); //некоторая зашифрованная строка
CMSEnvelopedDataParser parser = new CMSEnvelopedDataParser(authResponse.getAuthenticateResult());
RecipientInformation recInfo = getSingleRecipient(parser);
Recipient recipient = new JceKeyTransEnvelopedRecipient(key);
var decryptedStream = recInfo.getContentStream(recipient).getContentStream(); //<<< Исключение падает вот здесь
...
private static RecipientInformation getSingleRecipient(CMSEnvelopedDataParser parser) {
var recInfos = parser.getRecipientInfos().getRecipients();
var recipientIterator = recInfos.iterator();
if (!recipientIterator.hasNext()) {
throw new RuntimeException("Could not find recipient");
}
return (RecipientInformation) recipientIterator.next();
}
У меня такой вопрос 1. Уместно ли вообще использование bouncycastle для работы с JCP и если да, то как подружить ее с ГОСТОвскими алгоритмами? 2. Возможно есть другой способ расшифровки данных закрытым ключом, просьба подсказать куда смотреть, я смотрел документацию, но не нашел там ответа - она достаточно низкого уровня, то же самое с примерами. В частности Decrypt.java. Неужели тут все так сложно делается :) Требуется ли какая то дополнительная информация? Спасибо! Лог запуска
2021-08-19 13:29:35.440 INFO 13996 --- [ main] su.meo.emk.EmkApplication : Starting EmkApplication using Java 11.0.11 on meo with PID 13996 2021-08-19 13:29:35.440 INFO 13996 --- [ main] su.meo.emk.EmkApplication : No active profile set, falling back to default profiles: default 2021-08-19 13:29:36.294 INFO 13996 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.ws.config.annotation.DelegatingWsConfiguration' of type [org.springframework.ws.config.annotation.DelegatingWsConfiguration$$EnhancerBySpringCGLIB$$266a9292] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2021-08-19 13:29:36.355 INFO 13996 --- [ main] .w.s.a.s.AnnotationActionEndpointMapping : Supporting [WS-Addressing August 2004, WS-Addressing 1.0] 2021-08-19 13:29:36.746 INFO 13996 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2021-08-19 13:29:36.767 INFO 13996 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2021-08-19 13:29:36.768 INFO 13996 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.50] 2021-08-19 13:29:37.033 INFO 13996 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2021-08-19 13:29:37.034 INFO 13996 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1514 ms 2021-08-19 13:29:38.047 INFO 13996 --- [ main] o.s.ws.soap.saaj.SaajSoapMessageFactory : Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol 2021-08-19 13:29:38.591 INFO 13996 --- [ main] ru.CryptoPro.JCP.tools.JCPLogger : JCP license isServer: false 2021-08-19 13:29:39.222 INFO 13996 --- [ main] ru.CryptoPro.JCP.tools.JCPLogger : JCP license isServer: false 2021-08-19 13:29:39.232 INFO 13996 --- [ main] ru.CryptoPro.JCP.tools.JCPLogger : Loading JCP 2.0.41940-A 2021-08-19 13:29:39.337 INFO 13996 --- [ main] ru.CryptoPro.JCP.tools.JCPLogger : JCP has been loaded. 2021-08-19 13:29:40.648 INFO 13996 --- [ main] ru.CryptoPro.ssl.SSLLogger : %% adding as private keys %% 2021-08-19 13:29:41.174 INFO 13996 --- [ main] ru.CryptoPro.ssl.SSLLogger : SSLContextImpl init. 2021-08-19 13:29:41.193 INFO 13996 --- [ main] ru.CryptoPro.ssl.SSLLogger : trigger seeding of SecureRandom 2021-08-19 13:29:41.194 INFO 13996 --- [ main] ru.CryptoPro.ssl.SSLLogger : done seeding SecureRandom 2021-08-19 13:29:41.194 INFO 13996 --- [ main] ru.CryptoPro.ssl.SSLLogger : SSLContextImpl initialized. 2021-08-19 13:29:41.271 INFO 13996 --- [ main] o.s.ws.soap.saaj.SaajSoapMessageFactory : Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol 2021-08-19 13:29:41.577 INFO 13996 --- [ main] o.s.ws.soap.saaj.SaajSoapMessageFactory : Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol 2021-08-19 13:29:41.632 INFO 13996 --- [ main] o.s.ws.soap.saaj.SaajSoapMessageFactory : Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol 2021-08-19 13:29:42.212 INFO 13996 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2021-08-19 13:29:42.229 INFO 13996 --- [ main] su.meo.emk.EmkApplication : Started EmkApplication in 7.881 seconds (JVM running for 10.376) 2021-08-19 13:29:43.230 INFO 13996 --- [ main] ru.CryptoPro.JCP.tools.JCPLogger : Loading Crypto 2.0.41940-A [crypto module] 2021-08-19 13:29:43.233 INFO 13996 --- [ main] ru.CryptoPro.JCP.tools.JCPLogger : Crypto has been loaded. 2021-08-19 13:29:43.694 INFO 13996 --- [ main] su.meo.emk.EmkApplication : [CwService] Версия сервиса Cryptoweb activeX: `2.3`, minor version `1.5` 2021-08-19 13:29:43.700 INFO 13996 --- [ main] ru.CryptoPro.JCP.tools.JCPLogger : JCP license isServer: false 2021-08-19 13:29:43.701 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер SunMSCAPI 2021-08-19 13:29:43.701 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер JdkSASL 2021-08-19 13:29:43.702 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер XMLDSig 2021-08-19 13:29:43.702 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер SunPKCS11 2021-08-19 13:29:43.703 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер SunJGSS 2021-08-19 13:29:43.703 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер SunPCSC 2021-08-19 13:29:43.704 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер SunEC 2021-08-19 13:29:43.705 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер SunSASL 2021-08-19 13:29:43.706 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер JdkLDAP 2021-08-19 13:29:43.714 INFO 13996 --- [ main] ru.CryptoPro.JCP.tools.JCPLogger : JCP license isServer: false 2021-08-19 13:29:43.714 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер JTLS 2021-08-19 13:29:43.728 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер JCP 2021-08-19 13:29:43.733 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер RevCheck 2021-08-19 13:29:43.736 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер Crypto 2021-08-19 13:29:43.743 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер CryptoProXMLDSig 2021-08-19 13:29:43.933 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер BC 2021-08-19 13:29:43.934 INFO 13996 --- [ main] su.meo.emk.ws.CwClient : Зарегистрирован провайдер BCPQC
Отредактировано пользователем 19 августа 2021 г. 13:38:52(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,910 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 685 раз в 646 постах
|
Здравствуйте. Примеры зашифрования и расшифрования cms есть в папке cades/enveloped, с помощью класса EnvelopedSignature (из модуля Cades.jar). |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.08.2021(UTC) Сообщений: 3
|
Автор: Евгений Афанасьев Здравствуйте. Примеры зашифрования и расшифрования cms есть в папке cades/enveloped, с помощью класса EnvelopedSignature (из модуля Cades.jar). Спасибо большое за подсказку, все заработало! Оставлю кусочек кода, может кому-то еще пригодится Код:
ByteArrayOutputStream decryptedByteDataStream = new ByteArrayOutputStream();
EnvelopedSignature signature = new EnvelopedSignature(new ByteArrayInputStream(authResponse.getAuthenticateResult()));
signature.decrypt(certificate, privateKey, decryptedByteDataStream);
byte[] decryptedToken = decryptedByteDataStream.toByteArray();
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Расшифровка данных, NoSuchAlgorithmException: Algorithm 1.2.643.7.1.1.1.1 not available
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close