Скачал клиент СМЭВ3 с их сайта. Версия клиента client-4.1.6.0 (https://smev3.gosuslugi.ru/portal/api/files/1_client-4.1.6.0.zip)
Пытаюсь подписать сообщение с помощью их набора инструментов (*/toolset/signertool.sh)
Сообщение использовал из их примеров (примеры можно скачать тут -
https://smev3.gosuslugi.ru/portal/faq.jsp в ответе на вопрос: Есть ли примеры полных конвертов запросов отправляемых в СМЭВ 3?)
Выдернул бизнес контент из файла SendRequestRequestNoAttach.xml (мне как раз нужно подписать подобный запрос)
в итоге сохранил отдельный файл req.xml
с содержанием:
Код:
<ns1:BreachRequest xmlns:ns1="urn://x-artefacts-gibdd-gov-ru/breach/root/1.0" xmlns:ns2="urn://x-artefacts-gibdd-gov-ru/breach/commons/1.0" xmlns:ns3="urn://x-artefacts-smev-gov-ru/supplementary/commons/1.0.1" Id="PERSONAL_SIGNATURE"> <ns1:RequestedInformation> <ns2:RegPointNum>Т785ЕС57</ns2:RegPointNum> </ns1:RequestedInformation> <ns1:Governance> <ns2:Name>ГИБДД РФ</ns2:Name> <ns2:Code>GIBDD</ns2:Code> <ns2:OfficialPerson> <ns3:FamilyName>Загурский</ns3:FamilyName> <ns3:FirstName>Андрей</ns3:FirstName> <ns3:Patronymic>Петрович</ns3:Patronymic> </ns2:OfficialPerson></ns1:Governance> </ns1:BreachRequest>
у меня:
CryptoPro JCP 2.0.37027
xmlsec (org.apache.santuario) 1.4.5
немного изменил файл signertool.sh (оригинал давал ошибки)
#!/bin/bash
set -e
JAVA_CLASSPATH="$(pwd)/lib/*:$(pwd)"
java -classpath "${JAVA_CLASSPATH}" -Djava.endorsed.dirs=endorsed:/opt/cryptoprojcp ru.voskhod.smev.client.toolset.signer.Main "$@"
добавил только
set -e - для вывода ошибок
и
-Djava.endorsed.dirs=endorsed:/opt/cryptoprojcp
где endorsed, это папка находящаяся в той же папки где этот файл */toolset/endorsed, в ней лежат библиотеки:
bcpkix-jdk15on-1.47.jar
bcprov-jdk15on-1.47.jar
commons-logging.jar
xmlsec-1.4.5.jar
без них возникают ошибки ан подобие:
java.lang.NoClassDefFoundError: org/apache/xml/security/exceptions/AlgorithmAlreadyRegisteredException
/opt/cryptoprojcp добавлен так как без него возникает ошибки:
ru.voskhod.crypto.exceptions.SigLibInitializationException: Не удалось зарегистрировать алгоритм:
http://www.w3.org/2001/0...g.SignatureGostR34102001$SignatureGostR34102001GostR3411. Убедитесь что выбраный провайдер действительно установлен!
at ru.voskhod.crypto.DigitalSignatureFactory.initXmlSec(DigitalSignatureFactory.java:81)
Итак, сейчас запускаю этот файл таким образом, и получаю следующию ошибку:
muratov_tr@develop04 ~/SMEV/original/client-4.1.6.0/toolset $ ./signertool.sh -cmd signXml -if /home/muratov_tr/SMEV/data/req.xml
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
дек 04, 2017 10:09:10 AM ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 0.0 0.0.0
дек 04, 2017 10:09:10 AM ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
[04.12.2017 10:09:10.620] ERROR [main] - Ошибка утилиты
java.lang.ClassCastException: com.objsys.asn1j.runtime.Asn1OpenType cannot be cast to ru.CryptoPro.JCP.ASN.PKIX1Explicit88._gost2001DHPubKey_Type
at ru.CryptoPro.JCP.params.AlgIdSpec.<init>(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.u.a(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.u.m(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.u.<init>(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineGetKey(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(KeyStore.java:1023)
at ru.voskhod.crypto.impl.jcp.KeyStoreWrapperJCP.getPrivateKey(KeyStoreWrapperJCP.java:28)
at ru.voskhod.smev.client.api.signature.impl.SignerImpl.getKey(SignerImpl.java:69)
at ru.voskhod.smev.client.api.signature.impl.SignerImpl.init(SignerImpl.java:92)
at ru.voskhod.smev.client.api.signature.impl.SignerFactory.getSigner(SignerFactory.java:26)
at ru.voskhod.smev.client.api.signature.loader.Loader.getSigner(Loader.java:16)
at ru.voskhod.smev.client.api.factory.Factory.getSignerInstance(Factory.java:62)
at ru.voskhod.smev.client.toolset.signer.Main.<init>(Main.java:82)
at ru.voskhod.smev.client.toolset.signer.Main.main(Main.java:68)
Подскажите как можно это решить?
Пробовал с разными запросами req.xml (добавлял xml шапку, с пустым файлом тоже пробовал)
И может у кого то есть опыт подписания xml с помощью клиента smev3, опишите как вы это делали.