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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline rfilin  
#1 Оставлено : 30 марта 2016 г. 9:03:56(UTC)
rfilin

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день!!!
Собственно проблема состоит в следующем, при подписании XML-ки вызове sig.sign(signContext) выходит Exception
Использую пример с сайта КриптоПро


...
javax.xml.crypto.dsig.XMLSignature sig = fac.newXMLSignature(si, ki);
DOMSignContext signContext = new DOMSignContext((Key) privateKey, token);
sig.sign(signContext);
...

java.security.SignatureException: Unsupported method.
at ru.CryptoPro.JCSP.Key.AbstractKeySpec.signature(Unknown Source)
at ru.CryptoPro.JCP.Sign.c.engineSign(Unknown Source)
at java.security.Signature.sign(Unknown Source)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMSignatureMethod.sign(DOMSignatureMethod.java:246)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMXMLSignature.sign(DOMXMLSignature.java:378)
at App.App.main(App.java:216)

javax.xml.crypto.dsig.XMLSignatureException: java.security.SignatureException: Unsupported method.
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMSignatureMethod.sign(DOMSignatureMethod.java:249)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMXMLSignature.sign(DOMXMLSignature.java:378)
at App.App.main(App.java:216)
Caused by: java.security.SignatureException: Unsupported method.
at ru.CryptoPro.JCSP.Key.AbstractKeySpec.signature(Unknown Source)
at ru.CryptoPro.JCP.Sign.c.engineSign(Unknown Source)
at java.security.Signature.sign(Unknown Source)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMSignatureMethod.sign(DOMSignatureMethod.java:246)
... 2 more
java.security.SignatureException: Unsupported method.
at ru.CryptoPro.JCSP.Key.AbstractKeySpec.signature(Unknown Source)
at ru.CryptoPro.JCP.Sign.c.engineSign(Unknown Source)
at java.security.Signature.sign(Unknown Source)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMSignatureMethod.sign(DOMSignatureMethod.java:246)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMXMLSignature.sign(DOMXMLSignature.java:378)
at App.App.main(App.java:216)
java.security.SignatureException: Unsupported method.
at ru.CryptoPro.JCSP.Key.AbstractKeySpec.signature(Unknown Source)
at ru.CryptoPro.JCP.Sign.c.engineSign(Unknown Source)
at java.security.Signature.sign(Unknown Source)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMSignatureMethod.sign(DOMSignatureMethod.java:246)
at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMXMLSignature.sign(DOMXMLSignature.java:378)
at App.App.main(App.java:216)


Все jar вроде установлены, помогите разобраться.

Отредактировано пользователем 30 марта 2016 г. 9:58:25(UTC)  | Причина: Не указана

Offline cross  
#2 Оставлено : 30 марта 2016 г. 13:03:37(UTC)
Анатолий Беляев

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
У вас провайдер JCSP выбран вместо JCP, это или в коде неправильно добавили или в java.security или в контрольной панели надо выбрать.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
thanks 1 пользователь поблагодарил Анатолий Беляев за этот пост.
rfilin оставлено 30.03.2016(UTC)
Offline rfilin  
#3 Оставлено : 30 марта 2016 г. 13:56:06(UTC)
rfilin

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

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

Сказал(а) «Спасибо»: 1 раз
Мне и нужен был JCSP. Не мог понять почему он подгружал JCP. После вашего ответа еще покурил форум, и оказалось что, в java.security JCSP был прописан после JCP, поднял выше и заработало.
Спасибо!!!
Offline VBurmistrov  
#4 Оставлено : 7 апреля 2016 г. 15:45:07(UTC)
VBurmistrov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 7 раз в 5 постах
Здравствуйте!

Курю как раз эту же тему ))
И получаю такую же ошибку:

Код:
Caused by: org.apache.ws.security.WSSecurityException: Error during Signature:
        at ru.alfabank.orot.elixir.xmlsign.LocalSignatureAction.execute(LocalSignatureAction.java:95) [elixir-ejb.jar:]
        at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:232) [wss4j.jar:1.6.14]
        at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor.access$200(WSS4JOutInterceptor.java:52) [cxf-rt-ws-security.jar:2.7.10]
        at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:265) [cxf-rt-ws-security.jar:2.7.10]
        ... 74 more
Caused by: org.apache.ws.security.WSSecurityException: Signature creation failed
        at org.apache.ws.security.message.WSSecSignature.computeSignature(WSSecSignature.java:561) [wss4j.jar:1.6.14]
        at ru.alfabank.orot.elixir.xmlsign.LocalSignatureAction.execute(LocalSignatureAction.java:89) [elixir-ejb.jar:]
        ... 77 more
Caused by: javax.xml.crypto.dsig.XMLSignatureException: java.security.SignatureException: Unsupported method.
        at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMSignatureMethod.sign(DOMSignatureMethod.java:249) [jcp-jcsp-XMLDsigRI.jar:38674]
        at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMXMLSignature.sign(DOMXMLSignature.java:378) [jcp-jcsp-XMLDsigRI.jar:38674]
        at org.apache.ws.security.message.WSSecSignature.computeSignature(WSSecSignature.java:556) [wss4j.jar:1.6.14]
        ... 78 more
Caused by: java.security.SignatureException: Unsupported method.
        at ru.CryptoPro.JCSP.Key.AbstractKeySpec.signature(Unknown Source) [jcp-jcsp-JCSP.jar:38674]
        at ru.CryptoPro.JCP.Sign.c.engineSign(Unknown Source) [jcp-jcsp-JCP.jar:38674]
        at java.security.Signature.sign(Unknown Source) [rt.jar:1.8.0_77]
        at ru.CryptoPro.JCPxml.dsig.internal.dom.DOMSignatureMethod.sign(DOMSignatureMethod.java:246) [jcp-jcsp-XMLDsigRI.jar:38674]
        ... 80 more


Я на самом деле пытаюсь через org.apache.ws.security.components.crypto.Merlin вызвать веб сервис WSSecurity
Когда подставляю для Merlin в crypto.properties провайдер JCP и HDImageStore хранилище то все работает.
А мне надо подписать SOAP заголовок с помощью JCSP. Хранилище открывается, секретный ключ достается, но метод
Код:
 sig.sign(signContext);

возвращает такую ошибку.

В java.security JCSP поднял выше JCP, но это не помогает.
Подскажите, пожалуйста, в чем еще может быть дело?

Отредактировано пользователем 7 апреля 2016 г. 15:46:32(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#5 Оставлено : 7 апреля 2016 г. 16:50:09(UTC)
Евгений Афанасьев

Статус: Сотрудник

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Здравствуйте.
Попробуйте
Код:

...
DOMSignContext signContext = new DOMSignContext(privateKey, node);
signContext.setProperty("org.jcp.xml.dsig.internal.dom.SignatureProvider", "JCSP"); // <---
XMLSignature sig = sigFactory.newXMLSignature(signedInfo, keyInfo);
sig.sign(signContext);
...

Отредактировано пользователем 7 апреля 2016 г. 16:51:07(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
VBurmistrov оставлено 08.04.2016(UTC)
Offline VBurmistrov  
#6 Оставлено : 8 апреля 2016 г. 10:43:29(UTC)
VBurmistrov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 7 раз в 5 постах
Автор: afev Перейти к цитате
Здравствуйте.
Попробуйте
Код:

...
DOMSignContext signContext = new DOMSignContext(privateKey, node);
signContext.setProperty("org.jcp.xml.dsig.internal.dom.SignatureProvider", "JCSP"); // <---
XMLSignature sig = sigFactory.newXMLSignature(signedInfo, keyInfo);
sig.sign(signContext);
...


Afev, спасибо, да действительно помогает, SOAPENV я сформировал. Но дело у меня осложняется тем, что я встраивая это в Jboss CXF, использую org.apache.ws.security.message.WSSecSignature из wss4j.jar, а в его методе computeSignature создается локально signContext.
Чтобы проставить ему проперти, приходится переопределять весь метод.
Когда я так делаю, перестают отрабатывать LoggingInInterceptor и LoggingOutInterceptor из org.apache.cxf.interceptor.

Может кто сталкивался с этим?
Offline VBurmistrov  
#7 Оставлено : 8 апреля 2016 г. 17:01:03(UTC)
VBurmistrov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 7 раз в 5 постах
В общем один и тот же код. Если подписываю SOAP с помощью JCP, то все логируется.
Если подписываю с JCSP, то куда то пропадает мой org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor
Offline Евгений Афанасьев  
#8 Оставлено : 8 апреля 2016 г. 17:03:03(UTC)
Евгений Афанасьев

Статус: Сотрудник

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Причина именно в том, что JCSP передается как параметр в org.jcp.xml.dsig.internal.dom.SignatureProvider? Попробуйте туда ради эксперимента передать JCP и проверить с JCP (сломает ли работу или нет).

Отредактировано пользователем 8 апреля 2016 г. 17:04:19(UTC)  | Причина: Не указана

Offline VBurmistrov  
#9 Оставлено : 11 апреля 2016 г. 10:06:33(UTC)
VBurmistrov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 7 раз в 5 постах
Автор: afev Перейти к цитате
Причина именно в том, что JCSP передается как параметр в org.jcp.xml.dsig.internal.dom.SignatureProvider? Попробуйте туда ради эксперимента передать JCP и проверить с JCP (сломает ли работу или нет).


Здравствуйте!
Переключал работу обратно на HDImageStore и передавал в org.jcp.xml.dsig.internal.dom.SignatureProvider значение JCP, ничего не ломалось, получал нужный SOAP и MessageSenderInterceptor оставался на месте, SOAP заголовок логируется в JBoss.

А если передаем в org.jcp.xml.dsig.internal.dom.SignatureProvider провайдер JCSP, MessageSenderInterceptor вообще пропадает из Iterator -а и соответственно не handle-лица там где должен.
В пятницу весь день бился, вроде и по стеку вызовов все тоже самое в обоих случаях, а MessageSenderInterceptor нет.Brick wall
Offline VBurmistrov  
#10 Оставлено : 18 апреля 2016 г. 11:51:51(UTC)
VBurmistrov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 5 раз
Поблагодарили: 7 раз в 5 постах
Здравствуйте!

Свою же проблему - не печатания в лог SOAP заголовка я решил убрав подстановку пароля к хранилищу и ключу и оставив его (запрос пароля) полностью на откуп callBack-а JCSP и CSP.
Заголовок у меня начал печататься:

Код:
2016-04-18 08:27:21,273 INFO   (Thread-88) Outbound Message
---------------------------
ID: 1
Address: 
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml
Headers: {Accept=[*/*], SOAPAction=[""]}
Payload: <soapenv:Envelope xmlns:data= ... 


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