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

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline d.martynov  
#11 Оставлено : 14 августа 2013 г. 15:15:53(UTC)
d.martynov

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

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

Сказал(а) «Спасибо»: 4 раз
Добился пустого URI в reference и отсутствия ненужного Id у подписываемой сущности, но легче не стало. Теперь:
Цитата:
Подпись ЭП-СП под сущностью неверна


Кому не сложно, в личку, или сюда, покажите запрос с подписанными сущностями. Есть подозрение, что я подпись не туда ставлю.
Offline Corzina  
#12 Оставлено : 14 августа 2013 г. 15:52:42(UTC)
Corzina

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 1 раз в 1 постах
Автор: d.martynov Перейти к цитате
Добился пустого URI в reference и отсутствия ненужного Id у подписываемой сущности, но легче не стало. Теперь:
Цитата:
Подпись ЭП-СП под сущностью неверна


Кому не сложно, в личку, или сюда, покажите запрос с подписанными сущностями. Есть подозрение, что я подпись не туда ставлю.



Сейчас попробовал на тестовом сервисе - действительно на боевом ГИС ГМП все прокатывает нормально, а на тестовом такую же ошибку возвращает. Придется у себя тоже дорабатывать, а то включат неожиданно на боевом.

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

Offline d.martynov  
#13 Оставлено : 14 августа 2013 г. 16:41:27(UTC)
d.martynov

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

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

Сказал(а) «Спасибо»: 4 раз
Извините за оффтоп, но есть те, у которых на тестовом всё ок?
Offline artsuillus  
#14 Оставлено : 15 августа 2013 г. 6:29:00(UTC)
artsuillus

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 2 раз в 1 постах
Есть ) Правда Xpath-ом пользоваться не умею, т.к. на яве в первый раз пишу, так что вытаскиваю ПЕРВЫЙ элемент с нужным тегом из списка (tagNodeList.item(0)):
Код:
 public static void signElementByTag(SOAPMessage soapMessage, String tag) throws Exception{
    	//Инициализиция JCP
        com.sun.org.apache.xml.internal.security.Init.init();
        SpecUtility.initJCP();
        
        //Загрузка хранилища
        KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
        keyStore.load(null, null);

        //Ключ и сертификат
        PrivateKey privateKey = (PrivateKey)keyStore.getKey(SpecUtility.DEFAULT_ALIAS, SpecUtility.DEFAULT_PASSWORD);
        X509Certificate cert = (X509Certificate) keyStore.getCertificate(SpecUtility.DEFAULT_ALIAS);
                
        //Формируем новый документ из части сообщения
        NodeList tagNodeList = soapMessage.getSOAPPart().getElementsByTagName(tag);
        Document newXMLDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
        Node copyNode = newXMLDocument.importNode(tagNodeList.item(0), true);
        newXMLDocument.appendChild(copyNode);
        
        //Подписываемый элемент
        NodeList newNodeList = newXMLDocument.getElementsByTagName(tag);
        Element signedNode = (Element)newNodeList.item(0);
        
        Provider xmlDSigProvider = new ru.CryptoPro.JCPxml.dsig.internal.dom.XMLDSigRI();

        XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", xmlDSigProvider);

        List<Transform> transformList = new ArrayList<>();
       
        Transform transform = fac.newTransform(Transform.ENVELOPED, (XMLStructure) null);
        Transform transformC14N = fac.newTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS, (XMLStructure) null);
        transformList.add(transform);
        transformList.add(transformC14N);
        
        Reference ref = fac.newReference("", fac.newDigestMethod("http://www.w3.org/2001/04/xmldsig-more#gostr3411", null), transformList, null, null);

        SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE,
            (C14NMethodParameterSpec) null),
            fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411", null),
            Collections.singletonList(ref));

        KeyInfoFactory kif = fac.getKeyInfoFactory();
        X509Data x509d = kif.newX509Data(Collections.singletonList(cert));
        KeyInfo ki = kif.newKeyInfo(Collections.singletonList(x509d));

        javax.xml.crypto.dsig.XMLSignature sig = fac.newXMLSignature(si, ki);

        DOMSignContext signContext = new DOMSignContext(privateKey, signedNode);
        signContext.putNamespacePrefix(javax.xml.crypto.dsig.XMLSignature.XMLNS, "ds");
        sig.sign(signContext);
        
        //Заменяем исходный элемент на подписанный
        Document doc = soapMessage.getSOAPPart().getEnvelope().getOwnerDocument();
        Node signedTag = newXMLDocument.getFirstChild();
        Node oldNode = tagNodeList.item(0);
        Node parentNode = oldNode.getParentNode();
        parentNode.removeChild(oldNode);
        Node newNode = doc.importNode(signedTag, true);
        parentNode.appendChild(newNode);

    }

Отредактировано пользователем 15 августа 2013 г. 10:00:31(UTC)  | Причина: Не указана

thanks 2 пользователей поблагодарили artsuillus за этот пост.
Corzina оставлено 15.08.2013(UTC), d.martynov оставлено 16.08.2013(UTC)
Offline d.martynov  
#15 Оставлено : 16 августа 2013 г. 14:07:39(UTC)
d.martynov

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

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

Сказал(а) «Спасибо»: 4 раз
Странно, у меня при использовании этого кода сервис возвращает
Цитата:
Формат запроса (файла) не соответствует xsd-схеме
Offline mvv  
#16 Оставлено : 16 августа 2013 г. 14:30:06(UTC)
mvv

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

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

Поблагодарили: 2 раз в 2 постах
Цитата:
Формат запроса (файла) не соответствует xsd-схеме

Может быть не хватает обязательного тега или текст в каком-нибудь теге не соответствует restriction? Для тестирования очень полезна утилита SoapUI, там и валидацию запроса можно провести.
Offline d.martynov  
#17 Оставлено : 16 августа 2013 г. 14:42:25(UTC)
d.martynov

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

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

Сказал(а) «Спасибо»: 4 раз
Ей и пользуюсь. У меня вообще мистика. При использовании своего кода "Подпись ЭП-СП под сущностью неверна", а при использовании кода artsuillus - "Формат запроса (файла) не соответствует xsd-схеме"
Хотя запросы 1 в 1

Еще возможно сложность в том, что использую стабы, сгенерированные с помощью Axis2, и соответственно взаимодействие приходится вести немного иначе. wsimport (jaxws) неверно генерирует стабы сервиса, и запрос отправить возможно а вот получить ответ - нет (в интерфейсе unifoTransferMsg идет как void)

Ваш код использовать не удалось ввиду того, что у Вас собственная реализация класса XMLSignature

Отредактировано пользователем 16 августа 2013 г. 14:47:20(UTC)  | Причина: Не указана

Offline artsuillus  
#18 Оставлено : 16 августа 2013 г. 18:49:50(UTC)
artsuillus

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 2 раз в 1 постах
Автор: d.martynov Перейти к цитате
Формат запроса (файла) не соответствует xsd-схеме

Была такая проблема, когда собирал исходный xml-документ в удобном для чтения виде - с отступами и переносами. Стал записывать исходный документ в одну строку - ошибка испарилась.
Offline mvv  
#19 Оставлено : 23 августа 2013 г. 9:25:15(UTC)
mvv

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

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

Поблагодарили: 2 раз в 2 постах
Автор: d.martynov Перейти к цитате
Ваш код использовать не удалось ввиду того, что у Вас собственная реализация класса XMLSignature

У меня используется реализация
Код:
org.apache.xml.security.signature.XMLSignature
из библиотеки xmlsec-1.5.1.
thanks 1 пользователь поблагодарил mvv за этот пост.
d.martynov оставлено 30.08.2013(UTC)
Offline d.martynov  
#20 Оставлено : 23 августа 2013 г. 12:02:02(UTC)
d.martynov

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

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

Сказал(а) «Спасибо»: 4 раз
Но ведь там же нет необходимых нам алгоритмов, соответственно получаем

Цитата:
The requested algorithm http://www.w3.org/2001/0...#gostr34102001-gostr3411 does not exist.


Поправьте, если где-то не прав


UPD: нашел проблему. Для инициализации алгоритмов необходимо выполнить: ru.CryptoPro.JCPxml.XmlInit.init();

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

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