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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline nick_stan  
#1 Оставлено : 21 декабря 2011 г. 16:44:17(UTC)
nick_stan

Статус: Участник

Группы: Участники
Зарегистрирован: 02.12.2011(UTC)
Сообщений: 12

Пытаюсь подписать документ с помощью XMLSignature.

ru.CryptoPro.JCPxml.XmlInit.init(); - проходит успешно.

А на строке:

XMLSignature sig_soap = new XMLSignature(doc,null,ru.CryptoPro.JCPxml.Consts.URN_GOST_SIGN);

вываливается в exception:

org.apache.xml.security.signature.XMLSignatureException: The requested algorithm urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411 does not exist. Original Message was: null
Original Exception was java.lang.NullPointerException
at org.apache.xml.security.algorithms.SignatureAlgorithm.<init>(SignatureAlgorithm.java:148)
at org.apache.xml.security.signature.SignedInfo.<init>(SignedInfo.java:154)
at org.apache.xml.security.signature.XMLSignature.<init>(XMLSignature.java:236)
at org.apache.xml.security.signature.XMLSignature.<init>(XMLSignature.java:182)
at SOAPHandlerMsg.handleMessage(SOAPHandlerMsg.java:144)
at SOAPHandlerMsg.handleMessage(SOAPHandlerMsg.java:1)
at com.sun.xml.internal.ws.handler.HandlerProcessor.callHandleMessage(HandlerProcessor.java:281)
at com.sun.xml.internal.ws.handler.HandlerProcessor.callHandlersRequest(HandlerProcessor.java:122)
at com.sun.xml.internal.ws.handler.ClientSOAPHandlerTube.callHandlersOnRequest(ClientSOAPHandlerTube.java:127)
at com.sun.xml.internal.ws.handler.HandlerTube.processRequest(HandlerTube.java:105)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
at $Proxy41.unifoTransferMsg(Unknown Source)
at SMEVTEST.main(SMEVTEST.java:133)
java.lang.NullPointerException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.apache.xml.security.algorithms.SignatureAlgorithm.<init>(SignatureAlgorithm.java:127)
at org.apache.xml.security.signature.SignedInfo.<init>(SignedInfo.java:154)
at org.apache.xml.security.signature.XMLSignature.<init>(XMLSignature.java:236)
at org.apache.xml.security.signature.XMLSignature.<init>(XMLSignature.java:182)
at SOAPHandlerMsg.handleMessage(SOAPHandlerMsg.java:144)
at SOAPHandlerMsg.handleMessage(SOAPHandlerMsg.java:1)
at com.sun.xml.internal.ws.handler.HandlerProcessor.callHandleMessage(HandlerProcessor.java:281)
at com.sun.xml.internal.ws.handler.HandlerProcessor.callHandlersRequest(HandlerProcessor.java:122)
at com.sun.xml.internal.ws.handler.ClientSOAPHandlerTube.callHandlersOnRequest(ClientSOAPHandlerTube.java:127)
at com.sun.xml.internal.ws.handler.HandlerTube.processRequest(HandlerTube.java:105)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
at $Proxy41.unifoTransferMsg(Unknown Source)
at SMEVTEST.main(SMEVTEST.java:133)


Совершенно непонятно где проблема... при этом если алгоритм подписи поставить DSA - то все работает.



Offline nick_stan  
#2 Оставлено : 21 декабря 2011 г. 19:56:39(UTC)
nick_stan

Статус: Участник

Группы: Участники
Зарегистрирован: 02.12.2011(UTC)
Сообщений: 12

Разобрался сам - надеюсь будет полезно.

CryptoPro JCP как выяснилось не совместимо с последними версиями xmlsec (1.0.5) (что качаются с Apache).

Корректно работает с xmlsec-1.3.0.jar, не пробовал с xmlsec-1.4.0 - может тоже работают.

Разобрался почему.

В старых версиях конфигурация алгоритмов config.xml (org.apache.xml.security.resource) не имеет понятия provider,
т.е. описание нового алгоритма выглядит так:

<JCEAlgorithmMappings>

<Algorithms>
<!-- MessageDigest Algorithms -->
<Algorithm URI="http://www.w3.org/2001/04/xmldsig-more#md5"
Description="MD5 message digest from RFC 1321"
AlgorithmClass="MessageDigest"
RequirementLevel="NOT RECOMMENDED"
SpecificationURL="http://www.ietf.org/internet-drafts/draft-eastlake-xmldsig-uri-02.txt"
JCEName="MD5"/>


Что собственно и сделано в JCP.XML в пакете CryptoPro:

<!-- CryptoPro MessageDigest
-->
<Algorithm URI="http://www.w3.org/2001/04/xmldsig-more#gostr3411"
Description="GOST R 3411 Digest"
AlgorithmClass="MessageDigest"
RequirementLevel="REQUIRED"
JCEName="GOST3411"/>
<Algorithm
URI="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411"
Description="GOST R 3411 Digest"
AlgorithmClass="MessageDigest"
RequirementLevel="REQUIRED"
JCEName="GOST3411"/>
<!-- CryptoPro end
-->


В новой же версии 1.0.5 введено понятие провайдеров:

<JCEAlgorithmMappings>

<!-- Here, individual providers can be registered; each provider
is identified by Id which is referenced by ProviderId of the
Provider Element in the Algorithm Element -->
<Providers>
<Provider Id="BC"
Class="org.bouncycastle.jce.provider.BouncyCastleProvider"
Info="BouncyCastle Security Provider v1.09"
ProviderURL="http://www.bouncycastle.org/" />
<Provider Id="SUN"
Class="sun.security.provider.Sun"
Info="SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore)"
ProviderURL="http://java.sun.com/" />


.....

и уже алгоритм подключается к конкретному провайдеру:

<Algorithms>
<!-- MessageDigest Algorithms -->
<Algorithm URI="http://www.w3.org/2001/04/xmldsig-more#md5"
Description="MD5 message digest from RFC 1321"
AlgorithmClass="MessageDigest"
RequirementLevel="NOT RECOMMENDED"
SpecificationURL="http://www.ietf.org/internet-drafts/draft-eastlake-xmldsig-uri-02.txt">
<ProviderAlgo ProviderId="BC"
JCEName="MD5" />
</Algorithm>


Думаю, что неплохо бы поддержать новую спецификацию в CryptoJCP.








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