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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline MrLebovsky  
#1 Оставлено : 27 апреля 2020 г. 12:38:08(UTC)
MrLebovsky

Статус: Участник

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

Добрый день! Имеется некоторый файл совмещенной подписи (подпись вместе с контентом: response.rar (3kb) загружен 9 раз(а).).
Необходимо эту подпись проверить на Java.
Через КриптоАРМ файл прекрасно открывается, можно просмотреть подпись и сам файл.

На Java используем JCP и пробуем следующее:

Код:
new CAdESSignature(data, null, CAdESType.CAdES_BES);


Здесь data - массив байт исходного файла. Однако это выдает следующую ошибку:

Цитата:
Signer certificate reference is not found (signing-certificate-v2, signing-certificate and other-certificate are not found)


Насколько я понимаю, не может найти саму подпись. Возможно, это не CAdES_BES? Тогда как это посмотреть?
Заранее спасибо!
Offline Евгений Афанасьев  
#2 Оставлено : 27 апреля 2020 г. 15:23:27(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 688 раз в 649 постах
Здравствуйте.
Тогда попробуйте так, без типа:
Код:

new CAdESSignature(data, null, null);

т.к. CAdES-BES подразумевает наличие дополнительных атрибутов.
Offline MrLebovsky  
#3 Оставлено : 27 апреля 2020 г. 17:41:25(UTC)
MrLebovsky

Статус: Участник

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

Код:
new CAdESSignature(data, null, null)
не падает в ошибку.
Однако, после этого проверить подпись не удается:

Цитата:
Error building certification path for *CERTIFICATE DETAILS*: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target


Сертификат для проверки добавлен в доверенные JVM с помощью keytool.

Отредактировано пользователем 27 апреля 2020 г. 18:10:18(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 27 апреля 2020 г. 18:31:19(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 688 раз в 649 постах
Если подпись не CAdES, то проверка все равно выполняется схожим образом: строится и проверяется цепочка сертификатов. В вашем случае надо поставить корневой сертификат цепочки в JRE/lib/security/cacerts. Если есть промежуточные сертификаты у цепочки и они не включены в подпись, то их надо тоже дать в verify(), чтобы цепочка могла построиться.
Offline MrLebovsky  
#5 Оставлено : 28 апреля 2020 г. 11:12:41(UTC)
MrLebovsky

Статус: Участник

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

Автор: Евгений Афанасьев Перейти к цитате
Если подпись не CAdES, то проверка все равно выполняется схожим образом: строится и проверяется цепочка сертификатов. В вашем случае надо поставить корневой сертификат цепочки в JRE/lib/security/cacerts. Если есть промежуточные сертификаты у цепочки и они не включены в подпись, то их надо тоже дать в verify(), чтобы цепочка могла построиться.


При просмотре сертификата видна следующая цепочка:
Snimok.PNG (7kb) загружен 10 раз(а).

Каждый сертификат из этой цепочки был сохранен файл и с помощью keytool добавлен в JRE/lib/security/cacerts
Затем, файлы сертификатов были загружены в Java как X509Certificate. В конечном итоге,
Код:
            cadesSignature.verify(new HashSet<>(certificates));


выдает исключение:

Signers not found; error codes: [8] 'Signature is invalid',
Offline Евгений Афанасьев  
#6 Оставлено : 28 апреля 2020 г. 13:56:49(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 688 раз в 649 постах
Приложите подпись в виде файла, посмотрим.
Offline MrLebovsky  
#7 Оставлено : 29 апреля 2020 г. 5:09:26(UTC)
MrLebovsky

Статус: Участник

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

В первом сообщении темы приложен подписанный файл. Сертификаты я достал из него через КриптоАРМ
Offline Санчир Момолдаев  
#8 Оставлено : 2 мая 2020 г. 7:26:09(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 226 раз в 213 постах
файлы на стенде успешно проверяются.
как вы читаете исходный файл подписи?
Техническую поддержку оказываем тут
Наша база знаний
Offline MrLebovsky  
#9 Оставлено : 7 мая 2020 г. 10:09:21(UTC)
MrLebovsky

Статус: Участник

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

Кажется, я разобрался. Если инициировать объект подписи так:

Код:
new CAdESSignature(data, null, null, false, false);


То подпись успешно проверяется, но потом не удается извлечь подписанные данные с ошибкой "Stream closed".
Если инициировать так:

Код:
new CAdESSignature(data, null, null, false, true);


То данные успешно извлекаются, но подпись не проверяется.
Таким образом, я прихожу к выводу, что jcp библиотека исключает возможность сначала проверить подпись, а потом получить подписанный контент. Приходится действовать в обратном порядке с вызовом ICAdESSignature.decode()

Отредактировано пользователем 7 мая 2020 г. 16:01:48(UTC)  | Причина: Не указана

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