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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline JfbYtd-7900  
#1 Оставлено : 29 апреля 2019 г. 19:34:32(UTC)
JfbYtd-7900

Статус: Активный участник

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

Поблагодарили: 1 раз в 1 постах
Добрый день!

Подскажите, пожалуйста, кто знает. Использую jcp-2.0.39014. Все бьюсь с расшифровкой сообщения от ФСС. Использую ключи тестовой компании 2001 и транспорт 2001. Свое зашифрованное сообщение благополучно расшифровываю, но сообщение от ФСС получаю при расшифровке ошибку:
Код:

Exception was java.security.InvalidKeyException
at org.apache.xml.security.encryption.XMLCipher.decryptKey(XMLCipher.java:1422)
......
java.security.InvalidKeyException
	at ru.CryptoPro.Crypto.Cipher.TransportCipher.engineUnwrap(Unknown Source)
	at javax.crypto.Cipher.unwrap(Cipher.java:2466)
	at org.apache.xml.security.encryption.XMLCipher.decryptKey(XMLCipher.java:1420)
.............
Caused by: java.security.InvalidKeyException: Wrapped key is invalid
	at ru.CryptoPro.JCP.Key.SecretKeySpec.unwrap(Unknown Source)
	at ru.CryptoPro.Crypto.Cipher.GostCoreCipher.engineUnwrap(Unknown Source)
	at ru.CryptoPro.Crypto.Cipher.BaseGostCipher.engineUnwrap(Unknown Source)
	at javax.crypto.Cipher.unwrap(Cipher.java:2466)

Привожу пример кода:
Код:

            System.setProperty(Consts.PROPERTY_NAME,Consts.CONFIG);
            
            if(!XmlInit.isInitialized()) XmlInit.init();
            if(!org.apache.xml.security.Init.isInitialized()) org.apache.xml.security.Init.init();

            db=new DocumentBuilder();
            
            Document doc=db.createResponseDocument(value); //Здесь полное SOAP сообщение

            XMLCipher c1=XMLCipher.getInstance(Consts.URI_GOST_CIPHER);
            c1.init(XMLCipher.DECRYPT_MODE,null);

            Element encKeyElem=(Element)doc.getElementsByTagName("xenc:EncryptedKey").item(0);
            Element encryptedDataElement=(Element)doc.getElementsByTagNameNS(EncryptionConstants.EncryptionSpecNS,EncryptionConstants._TAG_ENCRYPTEDDATA).item(0);

            EncryptedKey encKey=c1.loadEncryptedKey(doc,encKeyElem);
            System.out.println("encKey.getCipherData().getCipherValue().getValue()="+encKey.getCipherData().getCipherValue().getValue());//Здесь есть значение ключа
            EncryptedData encData=c1.loadEncryptedData(doc,encryptedDataElement);
            System.out.println("encData.getCipherData().getCipherValue().getValue()="+encData.getCipherData().getCipherValue().getValue());//Здесь есть данные

            XMLCipher c2=XMLCipher.getInstance(Consts.URI_GOST_TRANSPORT);
            c2.init(XMLCipher.UNWRAP_MODE,jcpStoreApi.getPrivateKey());
 Key sk=c2.decryptKey(encKey,encData.getEncryptionMethod().getAlgorithm());//Здесь возникает ошибка!

            c1.init(XMLCipher.DECRYPT_MODE,sk);
 
            c1.doFinal(doc,encryptedDataElement);


На всякий случай значение ключа в ASN.1
Код:
SEQUENCE (2 elem)
  SEQUENCE (2 elem)
    OCTET STRING (32 byte) AEA894E0A34344C6B47D212B00681357C9F90E50520B6A8E6C7838772160249B
    OCTET STRING (4 byte) F5B3B5BF
  [0] (3 elem)
    OBJECT IDENTIFIER 1.2.643.2.2.31.1 cryptoProCipherA (CryptoPro params A (default, variant 'Verba-O') for GOST 28147-89)
    [0] (2 elem)
      SEQUENCE (2 elem)
        OBJECT IDENTIFIER 1.2.643.2.2.19 gostPublicKey (GOST R 34.10-2001 (ECC) public key)
        SEQUENCE (2 elem)
          OBJECT IDENTIFIER 1.2.643.2.2.36.0 cryptoProSignXA (CryptoPro ell.curve XA for GOST R 34.10-2001)
          OBJECT IDENTIFIER 1.2.643.2.2.30.1 cryptoProDigestA (CryptoPro digest params A (default, variant 'Verba-O') for GOST R 34.11-94)
      BIT STRING (1 elem)
        OCTET STRING (64 byte) 2139EDCD66F122FE9486DA2487C44574FC61743B6C69FD92DEA1C00DD216511CE6CC3B…
    OCTET STRING (8 byte) AEEF8E66D5255B35

Отредактировано пользователем 29 апреля 2019 г. 19:41:01(UTC)  | Причина: Не указана

Offline JfbYtd-7900  
#2 Оставлено : 30 апреля 2019 г. 14:37:55(UTC)
JfbYtd-7900

Статус: Активный участник

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

Поблагодарили: 1 раз в 1 постах
Наконец-то разобрался :).
Offline coldplay  
#3 Оставлено : 25 ноября 2019 г. 14:58:50(UTC)
coldplay

Статус: Активный участник

Группы: Участники
Зарегистрирован: 16.02.2016(UTC)
Сообщений: 60

Сказал(а) «Спасибо»: 18 раз
Поблагодарили: 2 раз в 2 постах
Автор: JfbYtd-7900 Перейти к цитате
Наконец-то разобрался :).


Очень рад за вас! Но по правилам хорошего тона, неплохо бы опубликовать решение. Столкнулся с такой же проблемой, хотелось бы узнать как вы ее решили.
Offline JfbYtd-7900  
#4 Оставлено : 25 ноября 2019 г. 15:09:43(UTC)
JfbYtd-7900

Статус: Активный участник

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

Поблагодарили: 1 раз в 1 постах
Конечно, там сущий пустяк, о котором наверное знают все :).

Шифрование идет на сертификате ФСС. После того как сообщение зашифровали, нужно ФСС-ный сертификат подменить на свой. Ответ ФСС шифрует на том сертификате, который в зашифрованном сообщении запроса.
thanks 1 пользователь поблагодарил JfbYtd-7900 за этот пост.
coldplay оставлено 25.11.2019(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.