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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Dmitry91  
#1 Оставлено : 28 марта 2016 г. 17:47:25(UTC)
Dmitry91

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

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

Сказал(а) «Спасибо»: 2 раз
Здравствуйте.

В своё время коллеги накидали программу, открепляющую подписи от приходящих файлов, причём на основе открытого ключа, как я понял, т.к. сертификатов у нас нет. И всё работало отлично, однако недавно начали попадаться файлы, валящиеся в ошибку. Программа сама написана с использованием JCP и библиотек BouncyCastle (не знаю почему)


if (Security.getProvider("BC") == null) {
Security.addProvider(new BouncyCastleProvider());
//Security.getProvider(ru.CryptoPro.JCP.JCP.PROVIDER_NAME);
}

// override algo
org.bouncycastle.cms.CMSConfig.setSigningDigestAlgorithmMapping(JCP.GOST_DIGEST_OID, JCP.GOST_DIGEST_NAME);
org.bouncycastle.cms.CMSConfig.setSigningEncryptionAlgorithmMapping(JCP.GOST_EL_DH_OID, "GOST3410DHEL" /*"GOST3411withGOST3410EL"*/);
org.bouncycastle.cms.CMSConfig.setSigningEncryptionAlgorithmMapping(JCP.GOST_EL_KEY_OID, JCP.GOST_EL_SIGN_NAME);

File inFile = new File("C:\\Input\\123.pdf.sig");
File outputFile = new File("C:\\Input\\123.pdf");

SignGetter sign = new SignGetter(inFile, outputFile);
try {

FileInputStream fInSig = new FileInputStream(inFile);
CMSSignedDataParser parser = null;
parser = new CMSSignedDataParser(/*new BcDigestCalculatorProvider(),*/fInSig);

InputStream isream = parser.getSignedContent().getContentStream();
FileOutputStream fos = new FileOutputStream(outputFile);

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (CMSException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (CertStoreException e) {
e.printStackTrace();
}

Это всё валится в ошибку

org.bouncycastle.cms.CMSException: Unexpected object reading content.
at org.bouncycastle.cms.CMSContentInfoParser.<init>(Unknown Source)
at org.bouncycastle.cms.CMSSignedDataParser.<init>(Unknown Source)
at org.bouncycastle.cms.CMSSignedDataParser.<init>(Unknown Source)
at signgetter.SignGetter.detachSign(SignGetter.java:88)
at signgetter.SignGetter.det(SignGetter.java:180)
at signgetter.SignGetter.main(SignGetter.java:195)
Caused by: java.lang.ClassCastException: org.bouncycastle.asn1.DERUnknownTag cannot be cast to org.bouncycastle.asn1.ASN1SequenceParser
... 6 more

Я попробовал сделать как указано в примере JCP

KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
keyStore.load(null, null);

File inFile = new File("C:\\Input\\123.pdf.sig");
InputStream fInSig = new FileInputStream(inFile);

byte[] pkcs7Sign = IOUtils.toByteArray(fInSig);

X509Certificate certificate = (X509Certificate) keyStore.getCertificate(ALIAS);

byte[] pkcs7Sign = createPKCS7(REQUEST.getBytes(), privateKey, certificate);

int i = -1;
final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(pkcs7Signature);
final ContentInfo all = new ContentInfo();
all.decode(asnBuf);

Exception in thread "main" com.objsys.asn1j.runtime.Asn1TagMatchFailedException: ASN.1 decode error @ offset 0:
Tag match failed: expected [UNIVERSAL 16], parsed [UNIVERSAL 13]
at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:449)
at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:466)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:55)
at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:218)
at test.test_main.verifyPKCS7(test_main.java:65)
at test.test_main.main(test_main.java:181)

Помогите пожалуйста разобраться, что не так. Файл не удаётся прикрепить, возможно ли его как-то ещё передать?
Offline Евгений Афанасьев  
#2 Оставлено : 1 апреля 2016 г. 13:54:05(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Здравствуйте.
Если редактировать/отвечать на сообщение, то в окне будет кнопка в виде скрепки, можно прикрепить вложение. Если не выйдет, вышлите подпись на afevma at cryptopro.ru, посмотрим ее.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Dmitry91 оставлено 05.04.2016(UTC)
Offline Евгений Афанасьев  
#3 Оставлено : 4 апреля 2016 г. 10:51:25(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Удалите строки
----- BEGIN PKCS7 SIGNED -----
и
----- END PKCS7 SIGNED -----,
перед использованием содержимого перекодируйте его из base64 в der.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Dmitry91 оставлено 05.04.2016(UTC)
Offline Dmitry91  
#4 Оставлено : 5 апреля 2016 г. 17:01:49(UTC)
Dmitry91

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

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

Сказал(а) «Спасибо»: 2 раз
Спасибо!
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.