Статус: Участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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 - не меняется.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,451 Сказал «Спасибо»: 553 раз Поблагодарили: 2235 раз в 1743 постах
|
Автор: eagames-ru
Почему DigitValue у меня всегда разный? значения этого тега FinalPayment - не меняется. ЭЦП по ГОСТ на одни и те же исходные данные всегда разная. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 30.11.2012(UTC) Сообщений: 21 Откуда: Уфа
Поблагодарили: 1 раз в 1 постах
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 30.11.2012(UTC) Сообщений: 21 Откуда: Уфа
Поблагодарили: 1 раз в 1 постах
|
в общем понял свою ошибку, token2 принадлежит основному документу который и подписывается. т.к. нужно только эту ноду подписать, то скопировал nd в новый документ, подписал документ и обратно скопировал в старый, далее подписал для СМЭВ и все заработало. валидация прошла успешно. Отредактировано пользователем 14 июня 2013 г. 13:41:15(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close