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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline therealmasel  
#1 Оставлено : 30 сентября 2020 г. 18:40:18(UTC)
therealmasel

Статус: Новичок

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

Сказал(а) «Спасибо»: 5 раз
Добрый день.

В одной из интеграций взаимодействуем с системой, которая возвращает сообщение, зашифрованное открытым ключом сертификата.
Для расшифровки соответственно надо использовать парный закрытый ключ.

Почитав форум и посмотрел примеры, нашел похожее в cmsutil.

Делаю так:

Код:

        final KeyStore hdImageStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
        hdImageStore.load(null, null);
//получаю приватный ключ
        final PrivateKey keyA = (PrivateKey) hdImageStore.getKey(alias, password);
 
        read = (int)EnvelopedCMS.getCipherTextOffset(inputStream);
        if (read < 0)
            throw new ASNDecodeException("CMS file is corrupted");
        structure = new byte[read];
        inputStream.close();
        ...
        read = inputStream.read(structure);
        if (read != structure.length)
            throw new ASNDecodeException("CMS file is corrupted");

//на этой строчке падает
        EnvelopedCMS msg = new EnvelopedCMS(structure, privateKey, JCP.PROVIDER_NAME);


Получаю ошибку:
cmsutil.asn1.ASNDecodeException: ASN1 parsing error: 0x5b tag received while tag 0x30 expected

Не знаю, в какую сторону смотреть.
Подскажите, если можете.
Offline Евгений Афанасьев  
#2 Оставлено : 30 сентября 2020 г. 19:21:35(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 688 раз в 649 постах
Здравствуйте.
Попробуйте EnvelopedSignature из состава CAdES.jar, примеры - в samples-sources.jar, пакет enveloped, например:
Код:

ByteArrayOutputStream decryptedByteDataStream = new ByteArrayOutputStream();
EnvelopedSignature signature = new EnvelopedSignature(new ByteArrayInputStream(encrypted_message));
signature.decrypt(your_certificate, your_private_key, decryptedByteDataStream);
byte[] decrypted_message = decryptedByteDataStream.toByteArray();
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
therealmasel оставлено 02.10.2020(UTC)
Offline therealmasel  
#3 Оставлено : 30 сентября 2020 г. 22:00:04(UTC)
therealmasel

Статус: Новичок

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

Сказал(а) «Спасибо»: 5 раз
Я попробовал, но получаю в конструкторе

Код:
EnvelopedSignature signature = new EnvelopedSignature(new ByteArrayInputStream(structure));


Код:
Exception in thread "main" ru.CryptoPro.CAdES.exception.EnvelopedException: Decoding of encrypted data failed
	at ru.CryptoPro.CAdES.EnvelopedSignature.<init>(Unknown Source)
	at ru.datamatica.ds.crypto.DecryptToken3.main(DecryptToken3.java:95)
Caused by: org.bouncycastle.cms.CMSException: Unexpected object reading content.
	at org.bouncycastle.cms.CMSContentInfoParser.<init>(Unknown Source)
	at org.bouncycastle.cms.CMSEnvelopedDataParser.<init>(Unknown Source)
Caused by: org.bouncycastle.cms.CMSException: Unexpected object reading content.

	... 2 more
Caused by: java.lang.ClassCastException: class org.bouncycastle.asn1.DLApplicationSpecific cannot be cast to class org.bouncycastle.asn1.ASN1SequenceParser (org.bouncycastle.asn1.DLApplicationSpecific and org.bouncycastle.asn1.ASN1SequenceParser are in unnamed module of loader 'app')
	... 4 more
Caused by: java.lang.ClassCastException: class org.bouncycastle.asn1.DLApplicationSpecific cannot be cast to class org.bouncycastle.asn1.ASN1SequenceParser (org.bouncycastle.asn1.DLApplicationSpecific and org.bouncycastle.asn1.ASN1SequenceParser are in unnamed module of loader 'app')
Offline Евгений Афанасьев  
#4 Оставлено : 1 октября 2020 г. 9:12:37(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 688 раз в 649 постах
Проверьте, если сообщение в base64, то перекодируйте в der (можно с помощью класса ru.CryptoPro.JCP.tools.Decoder). При условии, конечно, что у вас enveloped data.
Offline therealmasel  
#5 Оставлено : 1 октября 2020 г. 9:27:54(UTC)
therealmasel

Статус: Новичок

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

Сказал(а) «Спасибо»: 5 раз
Сообщение бинарное, а не base64.
Offline Евгений Афанасьев  
#6 Оставлено : 1 октября 2020 г. 10:23:13(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 688 раз в 649 постах
Приложите образец или пришлите на afevma at cryptopro.ru, посмотрим формат, так как ошибка декодирования.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
therealmasel оставлено 02.10.2020(UTC)
Offline therealmasel  
#7 Оставлено : 2 октября 2020 г. 17:32:30(UTC)
therealmasel

Статус: Новичок

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

Сказал(а) «Спасибо»: 5 раз
Проблема была в ошибочном формате сообщения от внешней системе. Спасибо большое.
Понимаю, что это может пригодиться кому-то еще, поэтому скажу, что способ с
Код:
EnvelopedSignature signature = new EnvelopedSignature(new ByteArrayInputStream(bytes));
сработал.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.