Статус: Новичок
Группы: Участники
Зарегистрирован: 27.09.2023(UTC) Сообщений: 3 Откуда: Москва
|
Добрый день! Я новичок в мире криптографии и электронных подписей, но на работе поставили задачу реализовать сервис для подписи XML. Покурил документацию, посмотрел какие алгоритмы нужны и вроде бы все получилось. Результат выглядит следующим образом: Код:<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header />
<soapenv:Body>
<ns1:SendRequestRequest xmlns:ns1="urn://x-artefacts-mcx-gov-ru/fgiz-zerno/api/ws/types/1.0.5">
<ns1:MessageData Id="SIGNED_BY_CALLER">
<ns1:MessageID>6540c547-38c7-4d83-b2eb-a9cf917dcb81</ns1:MessageID>
<ns1:ReferenceMessageID>6540c547-38c7-4d83-b2eb-a9cf917dcb81</ns1:ReferenceMessageID>
<ns1:MessagePrimaryContent>
<n0:Request xmlns:n0="urn://x-artefacts-mcx-gov-ru/fgiz-zerno/api/ws/dictionaries/1.0.6">
<n0:Dictionary>OKPD2</n0:Dictionary>
<n0:IsActual>true</n0:IsActual>
<n0:Paging pageNumber="0" pageLength="500" />
</n0:Request>
</ns1:MessagePrimaryContent>
</ns1:MessageData>
<ns1:InformationSystemSignature>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256" />
<Reference URI="#SIGNED_BY_CALLER">
<Transforms>
<Transform Algorithm="urn://smev-gov-ru/xmldsig/transform" />
</Transforms>
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256" />
<DigestValue>zLPQbeGc6buq+DaYcBmK6Fr13MeJPzUC5rjJlht38gw=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>S9DUL7HSpwZm1pU8WXzxCCr6R3/yy61A1a/QrA4I4Q1c7KVpqhSSrXeDILNLi38iGFxUKneV9BijEAvDyUYI9A==</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate></X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
</ns1:InformationSystemSignature>
</ns1:SendRequestRequest>
</soapenv:Body>
</soapenv:Envelope>
Я уж обрадовался и отправил все это счастье на API ФГИС Зерно. Но не тут-то было, получил ответ, что нужно в обязательном порядке у тега <Signature> сделать префикс ds. То-есть, они хотят видеть этот так вот в таком виде: <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> И тоже касается всех узлов внутри <ds:SignedInfo>, <ds:CanonicalizationMethod> и т.д. Я попробовал в наглую после подписи сделать модификации для подгона под их требования, но в итоге файл перестал проходить проверку подписи. И вот вопрос, можно как-то сделать, чтобы подпись уже сразу была с префиксом "ds"? Или возможно я думаю не в ту сторону, тогда прошу направить в правильную.
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Цитата:Я попробовал в наглую после подписи сделать модификации для подгона под их требования, но в итоге файл перестал проходить проверку подписи. Конечно перестал. В чем суть: <SignatureValue> содержит закодированное значение подписи от SignedInfo. Следовательно любое изменение SignedInfo, в том числе добавление префикса нарушит значение подписи. По факту, надо чтобы префикс уже был до момента вычисления SignatureValue. Методы как добиться правильного префиса зависят от того, какой функцией и каким интерфейсом подписываете. Через .NET я не помню, чтобы кто-то приводил решение по добавлению префикса. В общем случае, если подписываете через плагин и его дополнительные интерфейсы COM/Python/PHP с указанием TEMPLATE и шаблона, то в шаблон можно просто добавить каркас тега ds:Signature в нужном виде, без заполнения SignatureValue DigestValue
|
1 пользователь поблагодарил two_oceans за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.06.2024(UTC) Сообщений: 1 Откуда: Тула
|
День добрый. Тема создана давно, но. На днях получил такую же задачу с ФГИС "Зерно". Собрать запрос не проблема, но вот уткнулся в "XML-фрагмент не соответствует значению ЭЦП." Искал по форумам и наткнулся на эту тему. В документации на API ФГИС "Зерно" написано: "Перед отправкой сообщения с запросом ЭЦП формируется для блока структурированных сведений MessageData, подписывается содержимое элемента, заключённое между открывающим и закрывающим тегами элемента." Я второй день пытаюсь подписывать блок <ns:MessageID>77413256-744a-4897-8302-c8d8e4faf65e</ns:MessageID><ns:ReferenceMessageID>77413256-744a-4897-8302-c8d8e4faf65e</ns:ReferenceMessageID><ns:MessagePrimaryContent><n0:Request xmlns:n0="urn://x-artefacts-mcx-gov-ru/fgiz-zerno/api/ws/dictionaries/1.0.8"><n0:Dictionary>OKPD2</n0:Dictionary><n0:IsActual>true</n0:IsActual><n0:Paging pageNumber="0" pageLength="500" /></n0:Request></ns:MessagePrimaryContent>
И все время получаю "XML-фрагмент не соответствует значению ЭЦП." Подскажите, чего я недопонял? Нужно подписывать блок SignedInfo?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close