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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Афанасьев  
#11 Оставлено : 1 декабря 2017 г. 17:26:44(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: Вячеслав Александрович Перейти к цитате
никаких ссылок на родительский документ у нас нет, правильно?

Ссылка есть в References - <ds:Reference URI="">
Узел подписи добавляете после sign()?



thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Вячеслав Александрович оставлено 01.12.2017(UTC)
Offline Вячеслав Александрович  
#12 Оставлено : 1 декабря 2017 г. 20:41:55(UTC)
Вячеслав Александрович

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

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

Сказал(а) «Спасибо»: 2 раз
хвала богам! это действительно причина моей проблемы)
спасибо за помощь!

исходный код из примера xmlSign/XMLSignDoc.java выглядит так:

Код:
    
    // инициализация объекта формирования ЭЦП в соответствии с алгоритмом ГОСТ Р 34.10-2001
    final XMLSignature sig = new XMLSignature(doc, "", signMethod);

    // получение корневого узла XML-документа
    final Element anElement = doc.getDocumentElement();

    // добавление в корневой узел XML-документа узла подписи
    anElement.appendChild(sig.getElement());

    /* Определение правил работы с XML-документом и добавление в узел подписи этих правил */

    // создание узла преобразований <ds:Transforms> обрабатываемого XML-документа
    final Transforms transforms = new Transforms(doc);

    // добавление в узел преобразований правил работы с документом
    transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE);
    transforms.addTransform(Transforms.TRANSFORM_C14N_WITH_COMMENTS);

    sig.addDocument("", transforms, digestMethod);

    sig.addKeyInfo(cert);

    // создание подписи XML-документа
    sig.sign(privateKey);



и, конечно же, в данном случае всё будет прекрасно работать, поскольку добавлена трансформация Transforms.TRANSFORM_ENVELOPED_SIGNATURE
да только вот обсуждаемом примере нет ни одного комментария зачем это сделано! ;)

а сделано как раз для того, чтобы трансформация выпилила элемент <ds:Signature> из документа, и он не обратывался при формировании подписи.
естественно, когда убрал Transforms.TRANSFORM_ENVELOPED_SIGNATURE, стал подписываться документ вместе с пустым элементом <ds:Signature>

как понимаю, при верификации в моём случае происходило следующее:
- если не удалять элемент подписи, то сравниваем подписи документов с пустым и непустым <ds:Signature>
- если удалять, как посоветовали Вы, то сравниваем подписи документов с пустым <ds:Signature> и без него

ну и соответственно, добавление <ds:Signature> после подписи документа и удаление перед верификацией,
по факту - ручная реализация Transforms.TRANSFORM_ENVELOPED_SIGNATURE :)

Отредактировано пользователем 1 декабря 2017 г. 20:43:13(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#13 Оставлено : 1 декабря 2017 г. 21:35:07(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: Вячеслав Александрович Перейти к цитате
и, конечно же, в данном случае всё будет прекрасно работать, поскольку добавлена трансформация Transforms.TRANSFORM_ENVELOPED_SIGNATURE
да только вот обсуждаемом примере нет ни одного комментария зачем это сделано! ;)

В исходном примере enveloping подпись. В случае enveloped подпись перед проверкой удаляется; т.к. вы подписываете весь документ без enveloped, то узел подписи остается при проверке. Или подписывать определенный узел по Id, тогда проблем не должно было быть.
Offline Вячеслав Александрович  
#14 Оставлено : 1 декабря 2017 г. 21:51:05(UTC)
Вячеслав Александрович

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

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

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