Интеграция с web сервисом ГИИС ДМДК

1. Scorpion1_77 24 03.09.21 12:37 Сейчас в теме
Добрый день.

Кто-нибудь разрабатывал интеграцию с 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>
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. user5300 1063 03.09.21 15:14 Сейчас в теме
(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
6. Scorpion1_77 24 03.09.21 16:40 Сейчас в теме
(4) У приложенного файла компоненты какое должно быть расширение? dll?
И кто разработчик этой компоненты?
10. user5300 1063 06.09.21 10:58 Сейчас в теме
(6) Готовый файл, для вложения в "общие макеты".
Разработчик 1С. Используется в типовом УТ 11
5. user5300 1063 03.09.21 15:18 Сейчас в теме
(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(ПодписанныеДанные);
	//Возврат ПодписанныеДанные;
	
КонецФункции


Показать
9. Sashares 35 03.09.21 21:57 Сейчас в теме
(1)что мешает использовать компоненту xades из БГУ2?
2. user1461477 03.09.21 13:07 Сейчас в теме
Ювелиры, конечно, редкий клиент
Но подпись не только у ювелиров
В чем траблы, бро?
3. DJ_Codebase 03.09.21 14:12 Сейчас в теме
Тут смотреть нужно в сторону xmldsig , специфическая реализация. 1С штатно такое не умеет, но есть СОМ объекты, вроде как у КриптоПро есть CAdESCOM.SignedXML, курить надо в эту сторону
7. Scorpion1_77 24 03.09.21 16:45 Сейчас в теме
(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.
8. DJ_Codebase 03.09.21 17:28 Сейчас в теме
(7) Да, вроде в УТ 11.4 что то такое есть, возможно для интеграции с честным знаком добавили.
вообще тему эту еще не приходилось ковырять, поэтому есть смысл подготовится заранее. вот еще нашел почитать на этом ресурсе: club.directum.ru/post/546
11. antaido 66 30.09.21 15:06 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот