Статус: Новичок
Группы: Участники
Зарегистрирован: 14.11.2012(UTC) Сообщений: 6
|
Формирую запрос. В запросе идет 2 подписис. Одна подписывает блок DATA, вторая подпись - BODY С подписью для BODY все нормально. А вот со 2 подписью начинаются проблемы: элемент <Signature> находится в другом NS Делаю так : создаю <Signature> в нужном NS и копирую туда элементы из прописанной сигнатуры. Пытаюсь из элемента получить сигнатуру обратно: Код: private void unmarshaling(Element sig) throws Exception{
// Задаем открытый ключ для проверки подписи.
XMLSignatureFactory fac = getSigFactory();
DOMValidateContext valContext = new DOMValidateContext(KeySelector.singletonKeySelector(cert.getPublicKey()), sig);
if (valContext!=null){
System.out.println("context not null");
XMLSignature signature = fac.unmarshalXMLSignature(valContext);
System.out.println( "Verified: " + signature.validate(valContext));
}
}
в итоге fac.unmarshalXMLSignature выбрасывает java.lang.NullPointerException. Но valContext не null . С чем это связано? Может проблема в пространстве имен <Signature xmlns="http://asur.mos.ru/isi/declarants/v8">, потому как со стандартным NS анмаршалинг проходит нормально. Отредактировано пользователем 23 ноября 2012 г. 16:54:43(UTC)
| Причина: Не указана Вложение(я): etalon.xml (11kb) загружен 4 раз(а). myRequest.xml (6kb) загружен 2 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 14.11.2012(UTC) Сообщений: 6
|
Нашла один косяк. Когда переносила дочерние элементы в <Signature xmlns="http://asur.mos.ru/isi/declarants/v8">,то поменяла порядок на обратный. А они обязательно должы быть в таком порядке (при использовании org.jcp.xml.dsig порядок элементов в сигнатуре должен быть определенный, иначе подпись не валидируется): Код:
s.appendChild(sig1.getElementsByTagNameNS( NS_DS,"SignedInfo").item(0));
s.appendChild(sig1.getElementsByTagNameNS( NS_DS,"SignatureValue").item(0));
s.appendChild(sig1.getElementsByTagNameNS( NS_DS,"KeyInfo").item(0));
Теперь вылазит другая веселая ошибка : Код:
javax.xml.crypto.dsig.XMLSignatureException: javax.xml.crypto.dsig.TransformException: org.apache.xml.security.transforms.TransformationException: Enveloped Transform cannot find Signature element
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMReference.transform(DOMReference.java:440)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMReference.validate(DOMReference.java:364)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMXMLSignature.validate(DOMXMLSignature.java:249)
at org.plab.sign.SoapMessageSign.verify(SoapMessageSign.java:546)
at org.plab.sign.SoapMessageSign.SignDOMDocument(SoapMessageSign.java:347)
at org.plab.sign.SoapMessageSign.OrderedDataSign(SoapMessageSign.java:149)
at org.plab.sign.SoapMessageSign.OrderedDataSign(SoapMessageSign.java:169)
По идее у меня подпись находится рядом с подписываемым элементом, и эта трансформация вобще не нужна. Никакого толка от нее быть не должно ,насколько я понимаю. Но в итоге даже если ее убрать, то сервер все равно выдает ошибку внутренней подписи. Как еще можно проверить валидность? Когда я проверяю подпись самостоятельно - говорит, что все ОК. Отредактировано пользователем 23 ноября 2012 г. 17:00:24(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close