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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline alee  
#1 Оставлено : 22 ноября 2012 г. 14:08:21(UTC)
alee

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

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

У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
Offline alee  
#2 Оставлено : 22 ноября 2012 г. 20:13:13(UTC)
alee

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

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

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