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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Алексей Вдовин  
#1 Оставлено : 30 января 2025 г. 15:04:39(UTC)
Алексей Вдовин

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

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

Сказал(а) «Спасибо»: 78 раз
Поблагодарили: 1 раз в 1 постах
Коллеги, подскажите плиз как можно определить, что файл с подписью это отсоединённая подпись, либо присоединенная?

Если использовать
CAdESSignature cAdESSignature = new CAdESSignature(fileContent, null, null);

информация о подписи извлекается в обоих случаях
Offline Евгений Афанасьев  
#2 Оставлено : 30 января 2025 г. 19:23:37(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 727 раз в 685 постах
Можно проверить наличие подписанных данных, отложив декодирование подписи:
Код:

CAdESSignature cAdESSignature = new CAdESSignature(signature, null, null, false, true);
InputStream is = cAdESSignature.getSignedContent(); // если null, то подпись отделенная
cAdESSignature.decode();
Offline Алексей Вдовин  
#3 Оставлено : 10 февраля 2025 г. 6:16:16(UTC)
Алексей Вдовин

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

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

Сказал(а) «Спасибо»: 78 раз
Поблагодарили: 1 раз в 1 постах
Автор: Евгений Афанасьев Перейти к цитате
Можно проверить наличие подписанных данных, отложив декодирование подписи:


Евгений, подскажите - предложенный Вами код полностью заменяет такой, только декодирование отложенное?

CAdESSignature cAdESSignature = new CAdESSignature(fileContent, null, null);


Просто, я когда заменяю указанную Выше строку на Ваш код, у меня на присоединённой подписи на cAdESSignature.decode(); исключение падает
org.bouncycastle.cms.CMSException: problem parsing cert/crl sets

возвращаю обратно - всё корректно проходит

Offline Евгений Афанасьев  
#4 Оставлено : 10 февраля 2025 г. 10:48:23(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 727 раз в 685 постах
Проверим, спасибо за информацию. Ошибки быть не должно.
Offline Кирилл Артемкин  
#5 Оставлено : 11 февраля 2025 г. 13:51:11(UTC)
Кирилл Артемкин

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

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

Поблагодарили: 1 раз в 1 постах
Автор: Алексей Вдовин Перейти к цитате

Просто, я когда заменяю указанную Выше строку на Ваш код, у меня на присоединённой подписи на cAdESSignature.decode(); исключение падает
org.bouncycastle.cms.CMSException: problem parsing cert/crl sets


Вероятно исключение выкидывает из-за того, что подписанные данные не были прочитаны. Перед тем как сделать cAdESSignature.decode() нужно прочитать все из потока is.
Offline Алексей Вдовин  
#6 Оставлено : 11 февраля 2025 г. 14:13:02(UTC)
Алексей Вдовин

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

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

Сказал(а) «Спасибо»: 78 раз
Поблагодарили: 1 раз в 1 постах
Автор: Кирилл Артемкин Перейти к цитате
Вероятно исключение выкидывает из-за того, что подписанные данные не были прочитаны. Перед тем как сделать cAdESSignature.decode() нужно прочитать все из потока is.


зачем? мне is только для проверки на null и нужна
для decode() она не используется
Offline Кирилл Артемкин  
#7 Оставлено : 11 февраля 2025 г. 14:37:24(UTC)
Кирилл Артемкин

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

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

Поблагодарили: 1 раз в 1 постах
Я написал к вопросу о том, почему ошибка на decode() появляется
Offline Алексей Вдовин  
#8 Оставлено : 11 февраля 2025 г. 15:11:10(UTC)
Алексей Вдовин

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

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

Сказал(а) «Спасибо»: 78 раз
Поблагодарили: 1 раз в 1 постах
Автор: Кирилл Артемкин Перейти к цитате
Я написал к вопросу о том, почему ошибка на decode() появляется


так decode() это метод cAdESSignature
к потоку он отошения никакого не имеет

на сколько я понимаю поток вообще можно и не получать, если не нужно
т.е. сначала cAdESSignature с отложенным декодированием, потом сразу cAdESSignature.decode()
Offline Кирилл Артемкин  
#9 Оставлено : 11 февраля 2025 г. 15:54:53(UTC)
Кирилл Артемкин

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

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

Поблагодарили: 1 раз в 1 постах
При работе с подписью CAdESSignature последовательно читает ее содержимое. Когда мы создаем CAdESSignature с отложенным декодированием в конструкторе будет прочитана только часть подписи. В какой то момент в присоединенной подписи начинается фрагмент с подписанными данными. Их можно прочитать с помощью потока полученного из cAdESSignature.getSignedContent(). Затем в cAdESSignature.decode() будет прочитан оставшийся фрагмент подписи.

Если мы не прочитаем подписанные данные, то decode() споткнется о непрочитанный фрагмент с подписанными данными, отсюда и исключение (CAdESSignature же последовательно парсит подпись).

Таким образом decode() по сути связан с полученным потоком из cAdESSignature.getSignedContent(), потому что поток связан с парсером cAdESSignature. cAdESSignature.decode() сделать сразу после конструктора cAdESSignature с отложенным декодированием в случае присоединенной подписи не получится.
thanks 1 пользователь поблагодарил Кирилл Артемкин за этот пост.
Алексей Вдовин оставлено 11.02.2025(UTC)
Offline Алексей Вдовин  
#10 Оставлено : 11 февраля 2025 г. 16:34:25(UTC)
Алексей Вдовин

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

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

Сказал(а) «Спасибо»: 78 раз
Поблагодарили: 1 раз в 1 постах
Автор: Кирилл Артемкин Перейти к цитате
При работе с подписью CAdESSignature последовательно читает ее содержимое. Когда мы создаем CAdESSignature с отложенным декодированием в конструкторе будет прочитана только часть подписи. В какой то момент в присоединенной подписи начинается фрагмент с подписанными данными. Их можно прочитать с помощью потока полученного из cAdESSignature.getSignedContent(). Затем в cAdESSignature.decode() будет прочитан оставшийся фрагмент подписи.

Если мы не прочитаем подписанные данные, то decode() споткнется о непрочитанный фрагмент с подписанными данными, отсюда и исключение (CAdESSignature же последовательно парсит подпись).

Таким образом decode() по сути связан с полученным потоком из cAdESSignature.getSignedContent(), потому что поток связан с парсером cAdESSignature. cAdESSignature.decode() сделать сразу после конструктора cAdESSignature с отложенным декодированием в случае присоединенной подписи не получится.


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