Статус: Новичок
Группы: Участники
Зарегистрирован: 28.07.2020(UTC) Сообщений: 2  Откуда: Санкт-Петербург
|
Добрый день! Пытаюсь реализовать подпись SOAP пакета по примеру https://www.cryptopro.co...lzovaniem-kriptopro-jcp.Подпись ровно как в примере заработала но я столкнулся с некоторой трудностью. Мне необходимо подписать не один Reference, а сразу несколько. Вот так: Код:
<Reference URI="#Ipsaction">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256" />
<DigestValue>jRmyTH2mE3C0LNf1D0T7yKim3ya+z8ygQoqZDV8NybI=</DigestValue>
</Reference>
<Reference URI="#Ipsid">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256" />
<DigestValue>hdXz7KL5qKExiV+QfhTAQgVUxJEdRfaYn86H5m1ORgY=</DigestValue>
</Reference>
<Reference URI="#Ipssidid">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256" />
<DigestValue>QN+KRErSZXcvdZCNn86oBI3rCkbjrzcqj8uoN45NMAA=</DigestValue>
</Reference>
<Reference URI="#Reply">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256" />
<DigestValue>A6Gn5sq6vnAM6acVa9Bt85s50H9BOzbQq7NMF/fCwVU=</DigestValue>
</Reference>
<Reference URI="#Body">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256" />
<DigestValue>njfn7sOki7L5aAhtcd+Fpi7SZjeRIC9U2pu6iGeMrC0=</DigestValue>
</Reference>
Сейчас мой код выглядит так: Код:
Reference refIpsaction = fac.newReference("#Ipsaction",
fac.newDigestMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256", null),
transformList, null, null);
SignedInfo siIpsaction = fac.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE,
(C14NMethodParameterSpec) null),
fac.newSignatureMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256", null),
Collections.singletonList(refIpsaction));
KeyInfoFactory kif = fac.getKeyInfoFactory();
X509Data x509d = kif.newX509Data(Collections.singletonList(certificate));
KeyInfo ki = kif.newKeyInfo(Collections.singletonList(x509d));
javax.xml.crypto.dsig.XMLSignature sig = fac.newXMLSignature(siIpsaction, ki);
DOMSignContext signContext = new DOMSignContext(privateKey, token);
sig.sign(signContext);
как, собственно, в примере. Как его переделать так, чтобы подписывать больше одной Reference? Попробовал бездумно несколько раз делать sig.sign с разными Reference, но в таком случае у меня создаётся несколько блоков <wsse:Security>
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Пробовали так? Код:
Reference refIpsaction1 = fac.newReference("#Ipsaction1", // 1
fac.newDigestMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256", null),
transformList, null, null);
Reference refIpsaction2 = fac.newReference("#Ipsaction2", // 2
fac.newDigestMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256", null),
transformList, null, null);
Reference refIpsaction3 = fac.newReference("#Ipsaction3", // 3
fac.newDigestMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256", null),
transformList, null, null);
SignedInfo siIpsaction = fac.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE,
(C14NMethodParameterSpec) null),
fac.newSignatureMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256", null),
Arrays.asList(refIpsaction1, refIpsaction2, refIpsaction3));
|
|
 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 28.07.2020(UTC) Сообщений: 2  Откуда: Санкт-Петербург
|
Автор: Евгений Афанасьев  Здравствуйте. Пробовали так? Код:
Reference refIpsaction1 = fac.newReference("#Ipsaction1", // 1
fac.newDigestMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256", null),
transformList, null, null);
Reference refIpsaction2 = fac.newReference("#Ipsaction2", // 2
fac.newDigestMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256", null),
transformList, null, null);
Reference refIpsaction3 = fac.newReference("#Ipsaction3", // 3
fac.newDigestMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256", null),
transformList, null, null);
SignedInfo siIpsaction = fac.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE,
(C14NMethodParameterSpec) null),
fac.newSignatureMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256", null),
Arrays.asList(refIpsaction1, refIpsaction2, refIpsaction3));
Да, буквально сегодня утром проверил сигнатуру метода и догадался до этой идеи. Так работает. Но всё равно и вам спасибо :)
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close