Интеграция с web сервисом ГИИС ДМДК
Добрый день.
Кто-нибудь разрабатывал интеграцию с web сервисом ГИИС ДМДК?
В частности подписание электронной подписью сообщений soap.
Пример подписанного сообщения из документации ГИИС ДМДК:
Кто-нибудь разрабатывал интеграцию с web сервисом ГИИС ДМДК?
В частности подписание электронной подписью сообщений soap.
Пример подписанного сообщения из документации ГИИС ДМДК:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="urn://xsd.dmdk.goznak.ru/exchange/1.0">
<soapenv:Header/>
<soapenv:Body>
<ns:SendBatchRefiningRequest>
<ns:CallerSignature>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256" />
<ds:Reference URI="#req">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:Transform Algorithm="urn://smev-gov-ru/xmldsig/transform" />
</ds:Transforms>
<ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256" />
<ds:DigestValue>JTSMsuPptyXJaOHUiG/+RACzYM7ZKae9hflrCJkK/ck=</ds :DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>RKyWcojaouJS9hqfAh0R5zzmRiDzEGD0Gy7F3nBGIfvFT MvINxC9SjmvG+jxgQBgtYi9NyvIZZpWt9pvrRO57w==</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>Данные сертификата</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
</ns:CallerSignature>
<ns:RequestData id="req">
<ns:INP>6432100000152340</ns:INP>
<ns:INP>6432100000152368</ns:INP>
</ns:RequestData>
</ns:SendBatchRefiningRequest>
</soapenv:Body>
</soapenv:Envelope>
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Вот пример подписания с помощью компоненты "КомпонентаXMLDSig" :
&НаКлиенте
Функция ПодписатьДанные(Сертификат,Данные,Откреп = Ложь)
///Получим внешнюю компоненту из общих макетов (КомпонентаXMLDSig)
ВнешняяКомпонента = КомпонентаПодписи();
Если ВнешняяКомпонента = Неопределено Тогда
возврат Неопределено;
КонецЕсли;
///Получим отфарматированный сертификат (Двоичные данные, преобразованные в base64)
СертификатКриптографииBase64 = ПолучитьСертификатBase64Строку(Сертификат);
Если СертификатКриптографииBase64 = Неопределено Тогда
возврат Неопределено;
КонецЕсли;
Попытка
АтрибутSignatureValue = ВнешняяКомпонента.CMSSign(Данные, ///Подписываемые данные
СертификатКриптографииBase64, ///Сертификат в Base64
"", ///Параоль сертификата
0, //тип подписи "CAdES-BES"
Откреп, //открепленная
17); //РежимВключенияСертификатовКриптографии.ВключатьПолнуюЦепочку
Исключение
ВызватьИсключение НСтр("ru = 'Ошибка вызова метода CMSSign компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
///Преобразуем подпись в Base64Строку
Подпись = Base64Строка(АтрибутSignatureValue);
Подпись = СтрЗаменить(Подпись, Символы.ПС, "");
Подпись = СтрЗаменить(Подпись, Символы.ВК, "");
Возврат Подпись; ///Подписанные данные
КонецФункции
&НаКлиенте
Функция КомпонентаПодписи()
КомпонентаДвоичныеДанные = ПолучитьКомпонентуПодписи();
АдресМакета = ПоместитьВоВременноеХранилище(КомпонентаДвоичныеДанные);
Если ПодключитьВнешнююКомпоненту(АдресМакета, "XMLDSignAddInSymbolicName", ТипВнешнейКомпоненты.Native) Тогда
ВнешняяКомпонента = Новый("AddIn.XMLDSignAddInSymbolicName.XMLDSignAddIn");
Иначе
УстановитьВнешнююКомпоненту(АдресМакета);
Если ПодключитьВнешнююКомпоненту(АдресМакета, "XMLDSignAddInSymbolicName", ТипВнешнейКомпоненты.Native) Тогда
ВнешняяКомпонента = Новый("AddIn.XMLDSignAddInSymbolicName.XMLDSignAddIn");
Иначе
Сообщить(ОписаниеОшибки());
ВнешняяКомпонента = Неопределено;
КонецЕсли;
КонецЕсли;
Возврат ВнешняяКомпонента;
КонецФункции
&НаСервере
Функция ПолучитьКомпонентуПодписи() Экспорт
Возврат ПолучитьОбщийМакет("КомпонентаXMLDSig");
КонецФункции
&НаСервере
Функция ПолучитьСертификатBase64Строку(Ссылка) Экспорт
ДанныеСертификата = Ссылка.ФайлСертификата.Получить(); ///Двоичные данные сертификата (Из справочника Сертификаты ЭЦП)
СтрокаBase64 = Base64Строка(ДанныеСертификата);
Значение = СтрЗаменить(СтрокаBase64, Символы.ВК, "");
Значение = СтрЗаменить(Значение, Символы.ПС, "");
Возврат Значение;
КонецФункции
ПоказатьПрикрепленные файлы:
КомпонентаXMLDSig
(1) Еще один пример :
Функция ПодписатьСертификатомДокумент(ВыбранныйСертификат, СтрокаДляПодписи,Открепл)Экспорт
Попытка
comStore = Новый COMОбъект("CAdESCOM.Store");
comCPSigner = Новый COMОбъект("CAdESCOM.CPSigner"); // Аналог "CAPICOM.Signer".
comSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData");
Исключение
Сообщить("Не установлен КриптоПро!");
Возврат Неопределено;
КонецПопытки;
СтрокаВBase64 = Истина;
comStore.Open(
2, // StoreLocation - CAPICOM_CURRENT_USER_STORE.
"MY", // StoreName
0); // OpenMode - CAPICOM_STORE_OPEN_READ_ONLY.
comCertificates = comStore.Certificates;
comStore.Close();
comStore = Неопределено;
comCPSigner.Certificate = ВыбранныйСертификат;
// + Что-то из этого может быть нужным.
// comCPSigner.TSAAddress = "http://cryptopro.ru/tsp/";
// comCPSigner.Options = 0; // CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT. Ещё есть CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN и CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY.
Если СтрокаВBase64 Тогда // Очень важно!
comSignedData.ContentEncoding = 1; // CADESCOM_BASE64_TO_BINARY
//Иначе // Так и остаётся 0 - CADESCOM_ENCODE_BINARY
КонецЕсли;
comSignedData.Content = СтрокаДляПодписи;
ПодписанныеДанные = comSignedData.SignCades(
comCPSigner, // Signer
1, // CadesType, CADESCOM_CADES_BES.
Открепл, // bDetached - "флаг открепленной подписи (исходное сообщение не включается в итоговый CMS-контейнер)".
); // EncodingType - по умолчанию CAPICOM_ENCODE_BASE64.
comCPSigner = Неопределено;
comSignedData = Неопределено;
Возврат УбратьСимволы1013(ПодписанныеДанные);
//Возврат ПодписанныеДанные;
КонецФункции
Показать
(3) В БСП 3.15 вроде как появилась требуемая возможность по подписанию. Правда ни каких примеров кода нет :(
https://dl03.1c.ru/content/SSL/3_1_5_171/UpdateSSL.html#%D0%BD%D0%BE%D0%B2%D1%8B%D0%B5-%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82 %D0%B8-%D0%B8-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B2-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8-3.1.5
Электронная подпись
Для повышения скорости проверки и создания электронных подписей XMLDSig с помощью процедур Подписать и ПроверитьПодпись общих модулей ЭлектроннаяПодписьКлиент и ЭлектроннаяПодпись предусмотрено автоматическое определение параметров XMLDSig из передаваемого конверта XML. Для этого нужно оставить незаполненными свойства XPathSignedInfo и XPathПодписываемыйТег структуры, возвращаемой функцией ПараметрыXMLDSig общего модуля ЭлектроннаяПодписьКлиент и ЭлектроннаяПодпись.
Для упрощения создания электронных подписей XMLDSig в типовых сценариях добавлена функция КонвертXML в общие модули ЭлектроннаяПодписьКлиент и ЭлектроннаяПодпись. В описании функции указан подробный состав возможностей, предусмотренных для XML документа, которые следует учитывать при использовании различных форматов документа XML.
Теперь можно создавать и проверять подписи XMLDSig не только с алгоритмом канонизации Exclusive XML Canonicalization 1.0, но и с алгоритмами Canonical XML 1.0 и Canonical XML 1.1 (для всех трех алгоритмов поддерживается вариант WithComments). Кроме того, для работы с государственными и муниципальными сервисами такими как, ГИИС ДМДК и аналогичными, предусмотрен алгоритм канонизации Единой системы межведомственного электронного взаимодействия (СМЭВ) urn://smev-gov-ru/xmldsig/transform.
Электронная подпись
Для повышения скорости проверки и создания электронных подписей XMLDSig с помощью процедур Подписать и ПроверитьПодпись общих модулей ЭлектроннаяПодписьКлиент и ЭлектроннаяПодпись предусмотрено автоматическое определение параметров XMLDSig из передаваемого конверта XML. Для этого нужно оставить незаполненными свойства XPathSignedInfo и XPathПодписываемыйТег структуры, возвращаемой функцией ПараметрыXMLDSig общего модуля ЭлектроннаяПодписьКлиент и ЭлектроннаяПодпись.
Для упрощения создания электронных подписей XMLDSig в типовых сценариях добавлена функция КонвертXML в общие модули ЭлектроннаяПодписьКлиент и ЭлектроннаяПодпись. В описании функции указан подробный состав возможностей, предусмотренных для XML документа, которые следует учитывать при использовании различных форматов документа XML.
Теперь можно создавать и проверять подписи XMLDSig не только с алгоритмом канонизации Exclusive XML Canonicalization 1.0, но и с алгоритмами Canonical XML 1.0 и Canonical XML 1.1 (для всех трех алгоритмов поддерживается вариант WithComments). Кроме того, для работы с государственными и муниципальными сервисами такими как, ГИИС ДМДК и аналогичными, предусмотрен алгоритм канонизации Единой системы межведомственного электронного взаимодействия (СМЭВ) urn://smev-gov-ru/xmldsig/transform.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот