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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline eagames-ru  
#1 Оставлено : 13 июня 2013 г. 11:32:37(UTC)
eagames-ru

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

Группы: Участники
Зарегистрирован: 30.11.2012(UTC)
Сообщений: 21
Откуда: Уфа

Поблагодарили: 1 раз в 1 постах
Сделал подписывание сообщений для СМЭВ по этому примеру из блога http://www.cryptopro.ru/...olzovaniem-kriptopro-jcp


Появилась необходимость подписать еще сущность FinalPayment в теле сообщения.
Валидация не проходит, якобы сообщение после подписывания изменено, по коду подписываемая сущность не меняется.

Код
http://pastebin.ru/Qc0P1yI8

Сообщение которое получилось в итоге
<<Удалено>>

Что я делаю не так?

я правильно понимаю, что подписывается элемент token2?

Отредактировано пользователем 14 июня 2013 г. 13:52:12(UTC)  | Причина: Не указана

Offline eagames-ru  
#2 Оставлено : 14 июня 2013 г. 7:37:05(UTC)
eagames-ru

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

Группы: Участники
Зарегистрирован: 30.11.2012(UTC)
Сообщений: 21
Откуда: Уфа

Поблагодарили: 1 раз в 1 постах
Код:

Node nd = XPathAPI.selectSingleNode
                    (message.getSOAPBody().getFirstChild(), "//FinalPayment");
 
            if (nd != null) {
                Element token2 = (Element) nd;
 
                XMLSignatureFactory fac2 = XMLSignatureFactory.getInstance("DOM", xmlDSigProvider);
                List<Transform> transformList2 = new ArrayList<Transform>();
                Transform transformC14N22 = fac2.newTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE, (XMLStructure) null);
                Transform transformC14N2 = fac2.newTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS, (XMLStructure) null);
                transformList2.add(transformC14N22);
                transformList2.add(transformC14N2);
 
                // Ссылка на подписываемые данные с алгоритмом хеширования ГОСТ 34.11.
                Reference ref2 = fac2.newReference("", fac2.newDigestMethod("http://www.w3.org/2001/04/xmldsig-more#gostr3411", null),
                        transformList2, null, null);
                SignedInfo si2 = fac2.newSignedInfo(fac2.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE,
                        (C14NMethodParameterSpec) null), fac2.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411", null), Collections.singletonList(ref2));
                KeyInfoFactory kif2 = fac2.getKeyInfoFactory();
                X509Data x509d2 = kif2.newX509Data(Collections.singletonList((X509Certificate) certFk));
                KeyInfo ki2 = kif2.newKeyInfo(Collections.singletonList(x509d2));
 
                final XMLSignature sig2 = fac2.newXMLSignature(si2, ki2);
                DOMSignContext signContext2 = new DOMSignContext((Key) privateKeyFk, token2);
                signContext2.putNamespacePrefix(XMLSignature.XMLNS, "ds");
                sig2.sign(signContext2);
            }


Почему DigitValue у меня всегда разный? значения этого тега FinalPayment - не меняется.
Offline Андрей Писарев  
#3 Оставлено : 14 июня 2013 г. 8:17:38(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
Автор: eagames-ru Перейти к цитате


Почему DigitValue у меня всегда разный? значения этого тега FinalPayment - не меняется.


ЭЦП по ГОСТ на одни и те же исходные данные всегда разная.
Техническую поддержку оказываем тут
Наша база знаний
Offline eagames-ru  
#4 Оставлено : 14 июня 2013 г. 9:38:46(UTC)
eagames-ru

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

Группы: Участники
Зарегистрирован: 30.11.2012(UTC)
Сообщений: 21
Откуда: Уфа

Поблагодарили: 1 раз в 1 постах
...

Отредактировано пользователем 14 июня 2013 г. 13:56:44(UTC)  | Причина: Не указана

Offline eagames-ru  
#5 Оставлено : 14 июня 2013 г. 13:39:57(UTC)
eagames-ru

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

Группы: Участники
Зарегистрирован: 30.11.2012(UTC)
Сообщений: 21
Откуда: Уфа

Поблагодарили: 1 раз в 1 постах
в общем понял свою ошибку, token2 принадлежит основному документу который и подписывается.
т.к. нужно только эту ноду подписать, то скопировал nd в новый документ, подписал документ и обратно скопировал в старый, далее подписал для СМЭВ и все заработало. валидация прошла успешно.

Отредактировано пользователем 14 июня 2013 г. 13:41:15(UTC)  | Причина: Не указана

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