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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline skkachaev  
#1 Оставлено : 28 июля 2020 г. 22:45:37(UTC)
skkachaev

Статус: Новичок

Группы: Участники
Зарегистрирован: 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>
Offline Евгений Афанасьев  
#2 Оставлено : 29 июля 2020 г. 8:54:51(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 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));

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Андрей * оставлено 29.07.2020(UTC)
Offline skkachaev  
#3 Оставлено : 29 июля 2020 г. 10:36:17(UTC)
skkachaev

Статус: Новичок

Группы: Участники
Зарегистрирован: 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));



Да, буквально сегодня утром проверил сигнатуру метода и догадался до этой идеи. Так работает.
Но всё равно и вам спасибо :)

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