Доброго времени суток!
Задача Проверить входящую 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.
![](/forum2/Themes/soclean/icon_file.gif)
files.zip
(40kb) загружен 3 раз(а).