Форум КриптоПро
	 » 
	Средства криптографической защиты информации
	 » 
	КриптоПро 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) Сообщений: 4,064  Откуда: Крипто-ПроСказал(а) «Спасибо»: 21 разПоблагодарили: 740 раз в 698 постах
 
 | 
            
		      
                Здравствуйте. Примеры зашифрования и расшифрования 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