Статус: Участник
Группы: Участники
Зарегистрирован: 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 - то все работает.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close