Статус: Участник
Группы: Участники
Зарегистрирован: 12.08.2013(UTC) Сообщений: 10 Откуда: Краснодар Сказал(а) «Спасибо»: 4 раз
|
Добился пустого URI в reference и отсутствия ненужного Id у подписываемой сущности, но легче не стало. Теперь: Цитата:Подпись ЭП-СП под сущностью неверна
Кому не сложно, в личку, или сюда, покажите запрос с подписанными сущностями. Есть подозрение, что я подпись не туда ставлю.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 19.12.2012(UTC) Сообщений: 14 Откуда: Vladimir Сказал(а) «Спасибо»: 3 раз Поблагодарили: 1 раз в 1 постах
|
Автор: d.martynov Добился пустого URI в reference и отсутствия ненужного Id у подписываемой сущности, но легче не стало. Теперь: Цитата:Подпись ЭП-СП под сущностью неверна
Кому не сложно, в личку, или сюда, покажите запрос с подписанными сущностями. Есть подозрение, что я подпись не туда ставлю. Сейчас попробовал на тестовом сервисе - действительно на боевом ГИС ГМП все прокатывает нормально, а на тестовом такую же ошибку возвращает. Придется у себя тоже дорабатывать, а то включат неожиданно на боевом. Отредактировано пользователем 14 августа 2013 г. 15:53:41(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.08.2013(UTC) Сообщений: 10 Откуда: Краснодар Сказал(а) «Спасибо»: 4 раз
|
Извините за оффтоп, но есть те, у которых на тестовом всё ок?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
2 пользователей поблагодарили artsuillus за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.08.2013(UTC) Сообщений: 10 Откуда: Краснодар Сказал(а) «Спасибо»: 4 раз
|
Странно, у меня при использовании этого кода сервис возвращает Цитата:Формат запроса (файла) не соответствует xsd-схеме
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 05.08.2013(UTC) Сообщений: 3 Откуда: Череповец Поблагодарили: 2 раз в 2 постах
|
Цитата:Формат запроса (файла) не соответствует xsd-схеме Может быть не хватает обязательного тега или текст в каком-нибудь теге не соответствует restriction? Для тестирования очень полезна утилита SoapUI, там и валидацию запроса можно провести.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.08.2013(UTC) Сообщений: 10 Откуда: Краснодар Сказал(а) «Спасибо»: 4 раз
|
Ей и пользуюсь. У меня вообще мистика. При использовании своего кода "Подпись ЭП-СП под сущностью неверна", а при использовании кода artsuillus - "Формат запроса (файла) не соответствует xsd-схеме" Хотя запросы 1 в 1 Еще возможно сложность в том, что использую стабы, сгенерированные с помощью Axis2, и соответственно взаимодействие приходится вести немного иначе. wsimport (jaxws) неверно генерирует стабы сервиса, и запрос отправить возможно а вот получить ответ - нет (в интерфейсе unifoTransferMsg идет как void) Ваш код использовать не удалось ввиду того, что у Вас собственная реализация класса XMLSignature Отредактировано пользователем 16 августа 2013 г. 14:47:20(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.06.2013(UTC) Сообщений: 5 Сказал(а) «Спасибо»: 2 раз Поблагодарили: 2 раз в 1 постах
|
Автор: d.martynov Формат запроса (файла) не соответствует xsd-схеме Была такая проблема, когда собирал исходный xml-документ в удобном для чтения виде - с отступами и переносами. Стал записывать исходный документ в одну строку - ошибка испарилась.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 05.08.2013(UTC) Сообщений: 3 Откуда: Череповец Поблагодарили: 2 раз в 2 постах
|
Автор: d.martynov Ваш код использовать не удалось ввиду того, что у Вас собственная реализация класса XMLSignature У меня используется реализация Код:org.apache.xml.security.signature.XMLSignature
из библиотеки xmlsec-1.5.1.
|
1 пользователь поблагодарил mvv за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.08.2013(UTC) Сообщений: 10 Откуда: Краснодар Сказал(а) «Спасибо»: 4 раз
|
Но ведь там же нет необходимых нам алгоритмов, соответственно получаем Поправьте, если где-то не прав UPD: нашел проблему. Для инициализации алгоритмов необходимо выполнить: ru.CryptoPro.JCPxml.XmlInit.init(); Отредактировано пользователем 23 августа 2013 г. 12:14:09(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close