logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline BreatheIn  
#1 Оставлено : 13 марта 2013 г. 11:23:47(UTC)
BreatheIn

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

Группы: Участники
Зарегистрирован: 05.03.2013(UTC)
Сообщений: 2
Буркина Фасо
Откуда: Москва

Здравствуйте,

Формирую подпись запроса в СМЭВ (опирался на http://www.cryptopro.ru/...lzovaniem-kriptopro-jcp)

В простом standalone Java-приложении все работает корректно. При работе web-сервиса же в WebLogic получаю следующую исключительную ситуацию:

Цитата:

EJB Exception: : java.lang.AssertionError: UNIMPLEMENTED
at weblogic.xml.domimpl.DocumentImpl.getElementById(DocumentImpl.java:407)
at org.apache.xml.security.utils.resolver.implementations.ResolverFragment.engineResolve(ResolverFragment.java:83)
at org.apache.xml.security.utils.resolver.ResourceResolver.resolve(ResourceResolver.java:279)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMURIDereferencer.dereference(DOMURIDereferencer.java:97)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMReference.dereference(DOMReference.java:395)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMReference.digest(DOMReference.java:329)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMXMLSignature.digestReference(DOMXMLSignature.java:453)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMXMLSignature.sign(DOMXMLSignature.java:352)
...


Код:

            MessageFactory mf = MessageFactory.newInstance();
            SOAPMessage message = mf.createMessage();
            SOAPPart soapPart = message.getSOAPPart();

            WSSecHeader header = new WSSecHeader();
            header.setActor("http://smev.gosuslugi.ru/actors/smev");
            header.setMustUnderstand(false);
            header.insertSecurityHeader(env.getOwnerDocument()); 
  
            Element token = header.getSecurityHeader();

            KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
            keyStore.load(null, null);
            PrivateKey privateKey = (PrivateKey)keyStore.getKey(privateKey,  privateKeyPass.toCharArray());          
            X509Certificate cert = (X509Certificate)keyStore.getCertificate(cert);

            Document doc = message.getSOAPPart().getEnvelope().getOwnerDocument();
            Provider xmlDSigProvider = new ru.CryptoPro.JCPxml.dsig.internal.dom.XMLDSigRI();
            final Transforms transforms = new Transforms(doc);
            transforms.addTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);
            XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", xmlDSigProvider);
            
            //преобразования над узлом ds:SignedInfo
            List<Transform> transformList = new ArrayList<Transform>();
            Transform trasformC14N = fac.newTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS, (XMLStructure) null);
            transformList.add(trasformC14N);
            
            //ссылка на подписываемые данные с алгоритмом хэширования ГОСТ 34.11 (узел body)
            Reference ref = fac.newReference("#body", 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));
            
            //в качестве алгоритма хэширования был задан алгоритм ГОСТ Р 34.11-94, 
            //а алгоритма подписи — ГОСТ Р 34.10-2001.
            //создаем узел ds:KeyInfo с информацией о сертификате
            KeyInfoFactory kif = fac.getKeyInfoFactory();
            X509Data x509d = kif.newX509Data(Collections.singletonList((X509Certificate) cert));
            KeyInfo ki = kif.newKeyInfo(Collections.singletonList(x509d));
            
            XMLSignature sig = fac.newXMLSignature(si, ki);
            DOMSignContext signContext = new DOMSignContext((Key) privateKey, token);
            sig.sign(signContext); //ошибка происходит на этой строке
Offline ushmodin  
#2 Оставлено : 23 января 2014 г. 10:13:38(UTC)
ushmodin

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

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

У WLS походу своя недоделанная реализация xml парсера. Обрати внимание на at weblogic.xml.domimpl.DocumentImpl.getElementById(DocumentImpl.java:407)
добавь параметр в setDomainEnv.cmd -Djavax.xml.soap.MessageFactory=com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.