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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Iskander Yagfarov  
#1 Оставлено : 13 ноября 2018 г. 17:17:30(UTC)
Iskander Yagfarov

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

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

Сказал(а) «Спасибо»: 1 раз
Доброго времени суток!

Задача
Проверить входящую CAdES подпись (открепленная). Получаю из внешней системы. Она может приходить в формате CAdES-X Type 1 или CAdES-BES.

Оружение
Использую jdk1.8.0_191, jcp-2.0.39014.

Пример кода, который использую:

CAdESSignature signature = null;

try {
signature = new CAdESSignature(signatureContent, content, CAdESType.CAdES_X_Long_Type_1);
} catch (CAdESException e) {
try {
signature = new CAdESSignature(signatureContent, content, CAdESType.CAdES_BES);
} catch (CAdESException e1) {
throw new RuntimeException(e1);
}
}

Первое время подписи приходили и падало на строчке с созданием CAdES-X Type 1 с такой ошибкой (видимо подпись приходила в формате CAdES-BES):

no signing certificate attribute found, time stamp invalid.; error codes: [34] 'Timestamp is invalid',
at ru.CryptoPro.CAdES.g.a(Unknown Source)
at ru.CryptoPro.CAdES.g.a(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignature.<init>(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignature.<init>(Unknown Source)
at SignerOverCryptoproJCP.validateSignature(SignerOverCryptoproJCP.java:11)
at ApplicationStarter.main(ApplicationStarter.java:17)
Caused by: no signing certificate attribute found, time stamp invalid.; error codes: [34] 'Timestamp is invalid',
at ru.CryptoPro.CAdES.c.a.b.a(Unknown Source)
at ru.CryptoPro.CAdES.c.a.b.decode(Unknown Source)
at ru.CryptoPro.CAdES.c.a.c.decode(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignerPKCS7Impl.c(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignerBESImpl.c(Unknown Source)
... 6 more
Caused by: org.bouncycastle.tsp.TSPValidationException: no signing certificate attribute found, time stamp invalid.
at org.bouncycastle.tsp.TimeStampToken.<init>(Unknown Source)
... 11 more

но далее успешно отрабатывало создание с CAdESType.CAdES_BES и подпись далее успешно проходила верификацию. В этом случае ошибка в логе вполне понятная no signing certificate attribute found, time stamp invalid. Но со временем из внешней системы стали приходить подписи, которые стали падать на строчке с CAdES-X Type 1, но с другой ошибкой:

Exception in thread "main" java.lang.NullPointerException
at ru.CryptoPro.CAdES.c.a.c.e(Unknown Source)
at ru.CryptoPro.CAdES.c.a.c.decode(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignerPKCS7Impl.c(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignerBESImpl.c(Unknown Source)
at ru.CryptoPro.CAdES.g.a(Unknown Source)
at ru.CryptoPro.CAdES.g.a(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignature.<init>(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignature.<init>(Unknown Source)
at SignerOverCryptoproJCP.validateSignature(SignerOverCryptoproJCP.java:11)
at ApplicationStarter.main(ApplicationStarter.java:17)

но также успешно отрабатывало для случая с CAdESType.CAdES_BES. Но тут уже я не понимаю причины ошибки. Возможно что-то изменилось во внешней системе, которая подписывает эти файлы. Самому разобраться пока не получается. Есть примеры подписей с первой ошибкой и со второй. Хотелось бы узнать с чем связано NullPointerException?

Также пытался так new CAdESSignature(signatureContent, content, null), отдать на откуп определения формата подписи внутри api. Но вылезает ошибка:

Unknown signature type; error codes: [4] 'Unsupported signature type',
at ru.CryptoPro.CAdES.CAdESSignerFactory.a(Unknown Source)
at ru.CryptoPro.CAdES.g.a(Unknown Source)
at ru.CryptoPro.CAdES.g.a(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignature.<init>(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignature.<init>(Unknown Source)
at SignerOverCryptoproJCP.validateSignature(SignerOverCryptoproJCP.java:11)
at ApplicationStarter.main(ApplicationStarter.java:17)

Как еще можно определить формат подписи приходящей мне не известно. Возможно я что-то делаю не так. Хотелось бы получить какого-то рода консультацию, особенно интересно из-за чего может быть NPE.

files.zip (40kb) загружен 3 раз(а).

Offline Евгений Афанасьев  
#2 Оставлено : 13 ноября 2018 г. 17:24:29(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Добрый день.
Данные проверим, но я бы рекомендовал обновить версию jcp (cades), т.к. были исправления в плане определения типа подписи. Ошибка NPE, скорее всего, связана с каким-то неучтенным подведением при получении подписи, возможно, отличающейся по формату от ожидаемого. А Unsupported signature type - скорее всего, по той же причине (формат отличается от ожидаемого).
Попробуйте обновить версию jcp.
Offline Евгений Афанасьев  
#3 Оставлено : 14 ноября 2018 г. 10:25:32(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
1) по ошибке NPE: определение типа было, видимо, исправлено, и теперь тип подписи определяется, как CAdES-C (имеет ссылки, но не имеет сертификатов и доказательств). Проверка такого формата не поддерживается в CadES.jar (поэтому успешно проходит CAdES-BES, т.к. это, условно, сокращенная версия CAdES-C). В следующей версии постараемся выводить в ошибке больше информации, уточняющей полученный тип подписи.
2) по ошибке со штампом: штамп представляет собой подпись формата CMS, но в данном случае не содержит обязательный атрибут signingCertificate или signingCertificateV2. Видимо, он делается какими-то своими средствами. Необходимо добавлять такой атрибут, чтобы штамп подписи успешно декодировался.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Iskander Yagfarov оставлено 14.11.2018(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.