Статус: Новичок
Группы: Участники
Зарегистрирован: 27.12.2019(UTC) Сообщений: 4
|
Коллеги, добрый день! Уже n-ый день не могу решить проблему. Прошу Вашей помощи. Мне необходимо собрать SOAP-пакет, установить его в тело запроса HTTP, канонизировать Body и вычислить DigestValue, затем подписать блок SignedInfo. Сообщения до веб-сервиса доходят, но не проходят верификацию подписи (на той стороне и на моем ПК сертификаты одинаковые), выдает ответ 500 и ошибку ns1:SecurityError. Из 1С подписываю процедурой ЭлектроннаяПодписьКлиент.Подписать(). Я уверен, что ошибка в формировании и канонизации запроса. Так как я не эксперт в SOAP и не могу отладить эту подключаемую компоненту, которая высчитывает хэш, подписывает и тд, мне ничего не остается, кроме как обратиться к Вам. Буду благодарен за любые подсказки. Сформированный запрос (Текст кроме Body, DigestValue, SignatureValue, предопределен, пробелы, лишние символы удаляю перед выполнением процедур):
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soap:mustUnderstand="1"> <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="SIG-3"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gost3410" /> <Reference URI="#Body"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> <ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="" /> </ds:Transform> </ds:Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> <DigestValue>uiXqXQARC1P75DygchfugNJ2r2s=</DigestValue> </Reference> </SignedInfo> <SignatureValue xmlns="http://www.w3.org/2000/09/xmldsig#">uwtRkk2FLe06/FmVP4HjRdmnWOTEbWc68eUpW9W/HJXqK8Kq3SvYfro5im67avtr6ZXqOfHwe9i7dKBtzBPksw==</SignatureValue> <ds:KeyInfo Id="KI-2FF65E0C7C9E1562EF14177702709883"> <wsse:SecurityTokenReference wsu:Id="STR-2FF65E0C7C9E1562EF14177702709883"> <ds:X509Data> <ds:X509IssuerSerial> <ds:X509IssuerName>CN=JSA, O=JSA, C=RU, L=oskol, ST=BEL</ds:X509IssuerName> <ds:X509SerialNumber>3580310541514603215</ds:X509SerialNumber> </ds:X509IssuerSerial> </ds:X509Data> </wsse:SecurityTokenReference> </ds:KeyInfo> </ds:Signature> <wsse:UsernameToken wsu:Id="UsernameToken-2FF65E0C7C9E1562EF14177702709883"> <wsse:Username>login_lom</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">sadfdsf12</wsse:Password> </wsse:UsernameToken> </wsse:Security> </soap:Header> <soap:Body xmlns:v2="http://www.bpc.ru/alfabank/2014/12/emoneytransfer/v2" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Body"> <v2:makeTransferExtended xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <wallet>00000000</wallet> <comment>Transfer</comment> <customerInfo> <sourceIp>10.53.6.36</sourceIp> <fullName>OrgName</fullName> <address> <country>RUS</country> <city>SPB</city> <postalCode>309551</postalCode> <addressLine>Pussican Street One</addressLine> </address> </customerInfo> <recepientInfo> <fullName>Ivan Ivanov</fullName> </recepientInfo> <idValueDestination> <typevalue>lomnlmk</typevalue> <idvalue>login17html_lomnlmk_2366481490</idvalue> </idValueDestination> <amount> <requested>55555.6</requested> <fee>0</fee> <currency>810</currency> </amount> <id>99611</id> <type>99999</type> <time>2019-12-27T08:00:00.000-01:00</time> </v2:makeTransferExtended> </soap:Body> </soap:Envelope>
Параметры XMLDSig:
ПараметрыXMLDSig = ЭлектроннаяПодписьКлиентСервер.ПараметрыXMLDSig(); ПараметрыXMLDSig.XPathSignedInfo = "(//. | //@* |//namespace::*)[ancestor-or-self::*[local-name()='SignedInfo']]"; //(//. | //@* | //namespace::*)[ancestororself::*[local-name()='SignedInfo']] ПараметрыXMLDSig.XPathПодписываемыйТег = "(//. | //@* |//namespace::*)[ancestor-or-self::soap:Body]"; ПараметрыXMLDSig.ИмяАлгоритмаПодписи = "GOST R 34.10-2001"; ПараметрыXMLDSig.OIDАлгоритмаПодписи = "1.2.643.2.2.3"; // ГОСТ R 34.11/34.10-2001 ПараметрыXMLDSig.ИмяАлгоритмаХеширования = "SHA-1";//"GOST R 34.11-94"; ПараметрыXMLDSig.OIDАлгоритмаХеширования = "1.3.14.3.2.26";//"1.2.643.2.2.9";// ГОСТ R 34.11-94
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,501   Сказал «Спасибо»: 554 раз Поблагодарили: 2249 раз в 1755 постах
|
Здравствуйте. Через CAdESCOM.SignedXML попробуйте. Интерфейс ISignedXMLпсевдокод: Код:
if (algoOid == "1.2.643.7.1.1.1.1") // алгоритм подписи ГОСТ Р 34.10-2012 с ключом 256 бит
signMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256";
digestMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256";
else if (algoOid == "1.2.643.7.1.1.1.2") // алгоритм подписи ГОСТ Р 34.10-2012 с ключом 512 бит
signMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-512";
digestMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-512";
else if (algoOid == "1.2.643.2.2.19") // алгоритм ГОСТ Р 34.10-2001
signMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411";
digestMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411";
Код:
oSignedXML.ContentEncoding := CADESCOM_BASE64_TO_BINARY;
oSignedXML.Content := xml в base64
oSignedXML.SignatureType := CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED;
oSignedXML.SignatureMethod := signMethod;
oSignedXML.DigestMethod := digestMethod;
подпись = oSignedXML.Sign(oSigner);
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,501   Сказал «Спасибо»: 554 раз Поблагодарили: 2249 раз в 1755 постах
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,501   Сказал «Спасибо»: 554 раз Поблагодарили: 2249 раз в 1755 постах
|
алгоритмы из сертификата можно определить (или сделать настраиваемыми) Код:
pubKey = oSigner.Certificate.PublicKey();
algo = pubKey.Algorithm;
algoOid = algo.Value;
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.12.2019(UTC) Сообщений: 4
|
Автор: Андрей Писарев  Здравствуйте. Через CAdESCOM.SignedXML попробуйте. Интерфейс ISignedXML Извините за возможно глупый вопрос, но мне надо посчитать хэш для body,записать его в DigestValue, а затем подписать блок SignedInfo. А этот метод подписывает пакет полностью, настройки подписываемых тегов я не нашел в нем. Как его правильно вызвать?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 26.03.2020(UTC) Сообщений: 1
|
<ds:X509IssuerSerial> <ds:X509IssuerName>CN=JSA, O=JSA, C=RU, L=oskol, ST=BEL</ds:X509IssuerName> <ds:X509SerialNumber>3580310541514603215</ds:X509SerialNumber> </ds:X509IssuerSerial>
А Вы сами заполняли этот участок или у Вас при подписании он заполнен был?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.12.2019(UTC) Сообщений: 4
|
Коллеги, добрый день! Поскольку многие из Вас обращаются ко мне с вопросами по поводу этой интеграции, частые ошибки следующие: 1. Неправильный порядок подписи. Подписывать нужно не все сообщение SOAP, а только тэг SignedInfo, предварительно посчитав хэш Body и запихнув его в DigestValue. После этого 1С вернет вам в SignedInfo вашу подпись, вы ее вырезаете и вставляете в итоговое сообщение SOAP. Так же вам нужно отказаться от стандартной каниканолизации сообщения SOAP в 1С и подпихивать на подпись уже грубо говоря вручную каноникализированный шаблон (потребует доработки модуля ЭлектроннаяПодписьСлужебный, функции НачатьПодписание и послеподписиSignedInfo). Процесс каноникализации по факту является удалением пробелов и дополнение тегов. 2. Не все заголовки переданы: Вы должны передавать заголовок SOAPAction, с указанием URL метода, который вы вызываете. Отредактировано пользователем 21 мая 2021 г. 16:27:05(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close