wss- security soap client из 1С
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ssl = Новый ЗащищенноеСоединениеOpenSSL(
,Новый СертификатыУдостоверяющихЦентровФайл("sdcard/Download/cacert.pem"));
Определения = новый WSОпределения("https://www.xxx.ru/exchange/?wsdl",Пользователь,Пароль,,,ssl);
ПодключениеКPortal = Новый WSПрокси(Определения,"http://www.xxx.ru/","dd.users.webservice","CUserExchangeSoap",,,ssl);
ПодключениеКPortal.Пользователь = Пользователь;
ПодключениеКPortal.Пароль = Пароль;
КодПлощадки = ПодключениеКPortal.ConnectionCheck(Пользователь);
Показатьили так
Пользователь="------@mail.ru";
Пароль="********";
Прокси=Неопределено;
Попытка
SSL = Новый ЗащищенноеСоединениеOpenSSL();
Определения = Новый WSОпределения("https://www.ean13.org/ws/trade.wsdl",Пользователь,Пароль,,SSL);
Прокси = Новый WSПрокси(Определения, "http://www.ean13.org/trade/","ServiceEAN13_Trade", "Trade");
//Прокси = Новый WSПрокси(Определения, "https://www.ean13.org/trade/","ServiceEAN13_Trade", "Trade");
Прокси.Пользователь=Пользователь;
Прокси.Пароль=Пароль;
Исключение
Сообщить(ОписаниеОшибки());
//Сообщить("Не удалось подключится к сервису https://www.ean13.org/ws/trade.wsdl . Обратитесь к системному администратору");
Сообщить("Не удалось подключится к сервису http://www.ean13.org/ws/trade.wsdl . Обратитесь к системному администратору");
КонецПопытки;
Возврат Прокси;
Показать
В папке bin есть файл cacert.pem, туда его надо вписать.
Более подробно можно почитать тут:https://infostart.ru/public/79494/
В общем: вам понадобится OpenSSL - с его помощью надо будет преобразовать полученный сертификат в удобный для 1С вид (DER) и получить отпечаток MD5. Вот это содержимое надо будет добавить в файл cacert.pem в подобии с теми, что там уже есть.
Более подробно можно почитать тут:
В общем: вам понадобится OpenSSL - с его помощью надо будет преобразовать полученный сертификат в удобный для 1С вид (DER) и получить отпечаток MD5. Вот это содержимое надо будет добавить в файл cacert.pem в подобии с теми, что там уже есть.
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
HTTPСоединение = Новый HTTPСоединение("hckj.bi.em2.oraclecloud.com", 443, , , , , ЗащищенноеСоединение);
HTTPЗапрос = Новый HTTPЗапрос("/xmlpserver/services");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/soap+xml;charset=UTF-8");
HTTPЗапрос.Заголовки.Вставить("SOAPAction" , """");
HTTPЗапрос.Заголовки.Вставить("User-Agent" , "Apache-HttpClient/4.1.1 (java 1.5)");
HTTPЗапрос.Заголовки.Вставить("Connection", "Keep-Alive");
HTTPЗапрос.Заголовки.Вставить("Authorization", "Basic ******************");
Шаблон =
"<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"">
| <soap:Body>
| <runReport xmlns=""***************************"">
|<reportRequest>
|<parameterNameValues>
|<item>
|<name>date_time_from</name>
|<values>
| <item>"+Строка(ДатаНачала)+"</item>
|</values>
|</item>
|<item>
|<name>date_time_to</name>
|<values>
|<item>"+Строка(КонецГода(ТекущаяДата()))+"</item>
|</values>
|</item>
|<item>
|<name>bu_ids</name>
|<values>
|<item>"+СписокIDОрганизаций+"</item>
|</values>
|</item>
|</parameterNameValues>
|<attributeFormat>csv</attributeFormat>
|<reportAbsolutePath>/Custom/Services/1C/Report.xdo</reportAbsolutePath>
|<sizeOfDataChunkDownload>-1</sizeOfDataChunkDownload>
|</reportRequest>
|</runReport>
|</soap:Body>
|</soap:Envelope>";
HTTPЗапрос.УстановитьТелоИзСтроки(Шаблон, "utf-8", ИспользованиеByteOrderMark.НеИспользовать);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
HTTPСоединение = Новый HTTPСоединение("hckj.bi.em2.oraclecloud.com", 443, , , , , ЗащищенноеСоединение);
HTTPЗапрос = Новый HTTPЗапрос("/xmlpserver/services");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/soap+xml;charset=UTF-8");
HTTPЗапрос.Заголовки.Вставить("SOAPAction" , """");
HTTPЗапрос.Заголовки.Вставить("User-Agent" , "Apache-HttpClient/4.1.1 (java 1.5)");
HTTPЗапрос.Заголовки.Вставить("Connection", "Keep-Alive");
HTTPЗапрос.Заголовки.Вставить("Authorization", "Basic ******************");
Шаблон =
"<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"">
| <soap:Body>
| <runReport xmlns=""***************************"">
|<reportRequest>
|<parameterNameValues>
|<item>
|<name>date_time_from</name>
|<values>
| <item>"+Строка(ДатаНачала)+"</item>
|</values>
|</item>
|<item>
|<name>date_time_to</name>
|<values>
|<item>"+Строка(КонецГода(ТекущаяДата()))+"</item>
|</values>
|</item>
|<item>
|<name>bu_ids</name>
|<values>
|<item>"+СписокIDОрганизаций+"</item>
|</values>
|</item>
|</parameterNameValues>
|<attributeFormat>csv</attributeFormat>
|<reportAbsolutePath>/Custom/Services/1C/Report.xdo</reportAbsolutePath>
|<sizeOfDataChunkDownload>-1</sizeOfDataChunkDownload>
|</reportRequest>
|</runReport>
|</soap:Body>
|</soap:Envelope>";
HTTPЗапрос.УстановитьТелоИзСтроки(Шаблон, "utf-8", ИспользованиеByteOrderMark.НеИспользовать);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
обертка для сообщения не мое, с интернета автора не помню.
// Функция формирует шаблон WS-Security в заголовке SOAP-сообщения для создания подписи XMLDSIG.
//
// Параметры
// СтрокаXML - Строка - SOAP-сообщение.
//
// Возвращаемое значение:
// Строка - SOAP-сообщение + WS-Security.
//
Функция СоздатьСтруктуруWSSecurityДляSOAPсообщения(СтрокаXML) Экспорт
///////////////////////////////////////////////////
// Подготовка
ИД = Строка(Новый УникальныйИдентификатор);
ДанныеИД = "body";
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
Корень = ДокументDOM.ЭлементДокумента;
ПрефиксСОАП = Корень.НайтиПрефикс("http://schemas.xmlsoap.org/soap/envelope/");
// Добавим пространство имен "wsse" для спецификации WS-Security.
ПространствоИменСекрет = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
ПрефиксСекрет = "wsse";
УзелDOM = ДокументDOM.СоздатьАтрибут("http://www.w3.org/2000/xmlns/", "xmlns:" + ПрефиксСекрет);
УзелDOM.Значение = ПространствоИменСекрет;
Корень.Атрибуты.УстановитьИменованныйЭлемент(УзелDOM);
// Добавим пространство имен "wsu" для спецификации WS-Security.
ПространствоИменУтилити = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
ПрефиксУтилити = "wsu";
УзелDOM = ДокументDOM.СоздатьАтрибут("http://www.w3.org/2000/xmlns/", "xmlns:" + ПрефиксУтилити);
УзелDOM.Значение = ПространствоИменУтилити;
Корень.Атрибуты.УстановитьИменованныйЭлемент(УзелDOM);
// URI пространства имен сецификации XML Signature.
ПространствоИменЭП = "http://www.w3.org/2000/09/xmldsig#";
///////////////////////////////////////////////////
// Работа с Header
Header = Корень.ПолучитьЭлементыПоИмени(ПрефиксСОАП, "Header")[0];
// Security - узел, который будет хранить подпись XMLDSIG.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменСекрет, ПрефиксСекрет + ":Security");
УзелDOM = ДокументDOM.СоздатьАтрибут("http://schemas.xmlsoap.org/soap/envelope/", ПрефиксСОАП + ":mustUnderstand");
УзелDOM.Значение = "1";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
УзелDOM = ДокументDOM.СоздатьАтрибут("http://schemas.xmlsoap.org/soap/envelope/", ПрефиксСОАП + ":actor");
УзелDOM.Значение = "http://alfastrah.ru/interplat4/partners/interaction/";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
Security = Header.ДобавитьДочерний(ЭлементDOM);
// BinarySecurityToken - узел, который будет хранить открытый ключ.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменСекрет, ПрефиксСекрет + ":BinarySecurityToken");
ТекстDOM = ДокументDOM.СоздатьТекстовыйУзел("#Certificate_ENCODE_BASE64");
ЭлементDOM.ДобавитьДочерний(ТекстDOM);
УзелDOM = ДокументDOM.СоздатьАтрибут(ПространствоИменУтилити, ПрефиксУтилити + ":Id");
УзелDOM.Значение = ИД;
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
УзелDOM = ДокументDOM.СоздатьАтрибут("ValueType");
УзелDOM.Значение = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
УзелDOM = ДокументDOM.СоздатьАтрибут("EncodingType");
УзелDOM.Значение = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
BinarySecurityToken = Security.ДобавитьДочерний(ЭлементDOM);
// Signature - узел, который будет хранить информацию о том, что было подписано,
// подпись, ключи, используемые для создания подписи,
// и место для сохранения произвольных данных.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "Signature");
Signature = Security.ДобавитьДочерний(ЭлементDOM);
// SignedInfo - информация о подписываемых элементах.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "SignedInfo");
SignedInfo = Signature.ДобавитьДочерний(ЭлементDOM);
// CanonicalizationMethod - алгоритм приведения к каноническому виду.
// Для СМЭВ "http://www.w3.org/2001/10/xml-exc-c14n#".
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "CanonicalizationMethod");
УзелDOM = ДокументDOM.СоздатьАтрибут("Algorithm");
УзелDOM.Значение = "http://www.w3.org/2001/10/xml-exc-c14n#";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
SignedInfo.ДобавитьДочерний(ЭлементDOM);
// SignatureMethod - идентификатор алгоритма подписи.
// Для СМЭВ "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411".
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "SignatureMethod");
УзелDOM = ДокументDOM.СоздатьАтрибут("Algorithm");
УзелDOM.Значение = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
SignedInfo.ДобавитьДочерний(ЭлементDOM);
// Reference - атрибут URI, содержащий ссылку на подписываемый элемент в документе.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "Reference");
УзелDOM = ДокументDOM.СоздатьАтрибут("URI");
УзелDOM.Значение = "#" + ДанныеИД;
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
Reference = SignedInfo.ДобавитьДочерний(ЭлементDOM);
// Transforms - преобразования, которые следует применить к подписываемым элементам.
// В данном случае - приведение к каноническому виду.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "Transforms");
Transforms = Reference.ДобавитьДочерний(ЭлементDOM);
// Transform - см. описание Transforms.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "Transform");
УзелDOM = ДокументDOM.СоздатьАтрибут("Algorithm");
УзелDOM.Значение = "http://www.w3.org/2001/10/xml-exc-c14n#";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
Transforms.ДобавитьДочерний(ЭлементDOM);
// DigestMethod - идентификатор алгоритма хэширования.
// Для СМЭВ "http://www.w3.org/2001/04/xmldsig-more#gostr3411".
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "DigestMethod");
УзелDOM = ДокументDOM.СоздатьАтрибут("Algorithm");
УзелDOM.Значение = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
Reference.ДобавитьДочерний(ЭлементDOM);
// DigestValue - узел будет содержать хэш-значение подписываемых элементов.
// Данный элемент следует оставить пустым.
// Его значение будет заполнено при создании подписи.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "DigestValue");
Reference.ДобавитьДочерний(ЭлементDOM);
// SignatureValue - узел будет содержать значение подписи.
// Данный элемент следует оставить пустым.
// Его значение будет заполнено при создании подписи.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "SignatureValue");
SignatureValue = Signature.ДобавитьДочерний(ЭлементDOM);
// KeyInfo - узел будет содержать информацию о сертификате ключа подписи.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "KeyInfo");
KeyInfo = Signature.ДобавитьДочерний(ЭлементDOM);
// SecurityTokenReference - узел будет содержать ссылку на сертификат.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменСекрет, ПрефиксСекрет + ":SecurityTokenReference");
SecurityTokenReference = KeyInfo.ДобавитьДочерний(ЭлементDOM);
// Reference - атрибут ValueType содержит значение
// "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3".
// Атрибут URI содержит ссылку на уникальный идентификатор
// сертификата (такой же, как указан в элементе BinarySecurityToken).
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменСекрет, ПрефиксСекрет + ":Reference");
УзелDOM = ДокументDOM.СоздатьАтрибут("ValueType");
УзелDOM.Значение = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
УзелDOM = ДокументDOM.СоздатьАтрибут("URI");
УзелDOM.Значение = "#" + ИД;
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
SecurityTokenReference.ДобавитьДочерний(ЭлементDOM);
///////////////////////////////////////////////////
// Работа с Body
Body = Корень.ПолучитьЭлементыПоИмени(ПрефиксСОАП, "Body")[0];
УзелDOM = ДокументDOM.СоздатьАтрибут(ПространствоИменУтилити, ПрефиксУтилити + ":Id");
УзелDOM.Значение = ДанныеИД;
Body.УстановитьУзелАтрибута(УзелDOM);
///////////////////////////////////////////////////
// Формирование XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку(Новый ПараметрыЗаписиXML("UTF-8"));
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(Корень, ЗаписьXML);
СформированныйДокумент = ЗаписьXML.Закрыть();
Возврат СформированныйДокумент;
КонецФункции // СоздатьСтруктуруWSSecurityДляSOAPсообщения()
// Функция формирует шаблон WS-Security в заголовке SOAP-сообщения для создания подписи XMLDSIG.
//
// Параметры
// СтрокаXML - Строка - SOAP-сообщение.
//
// Возвращаемое значение:
// Строка - SOAP-сообщение + WS-Security.
//
Функция СоздатьСтруктуруWSSecurityДляSOAPсообщения(СтрокаXML) Экспорт
///////////////////////////////////////////////////
// Подготовка
ИД = Строка(Новый УникальныйИдентификатор);
ДанныеИД = "body";
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
Корень = ДокументDOM.ЭлементДокумента;
ПрефиксСОАП = Корень.НайтиПрефикс("http://schemas.xmlsoap.org/soap/envelope/");
// Добавим пространство имен "wsse" для спецификации WS-Security.
ПространствоИменСекрет = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
ПрефиксСекрет = "wsse";
УзелDOM = ДокументDOM.СоздатьАтрибут("http://www.w3.org/2000/xmlns/", "xmlns:" + ПрефиксСекрет);
УзелDOM.Значение = ПространствоИменСекрет;
Корень.Атрибуты.УстановитьИменованныйЭлемент(УзелDOM);
// Добавим пространство имен "wsu" для спецификации WS-Security.
ПространствоИменУтилити = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
ПрефиксУтилити = "wsu";
УзелDOM = ДокументDOM.СоздатьАтрибут("http://www.w3.org/2000/xmlns/", "xmlns:" + ПрефиксУтилити);
УзелDOM.Значение = ПространствоИменУтилити;
Корень.Атрибуты.УстановитьИменованныйЭлемент(УзелDOM);
// URI пространства имен сецификации XML Signature.
ПространствоИменЭП = "http://www.w3.org/2000/09/xmldsig#";
///////////////////////////////////////////////////
// Работа с Header
Header = Корень.ПолучитьЭлементыПоИмени(ПрефиксСОАП, "Header")[0];
// Security - узел, который будет хранить подпись XMLDSIG.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменСекрет, ПрефиксСекрет + ":Security");
УзелDOM = ДокументDOM.СоздатьАтрибут("http://schemas.xmlsoap.org/soap/envelope/", ПрефиксСОАП + ":mustUnderstand");
УзелDOM.Значение = "1";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
УзелDOM = ДокументDOM.СоздатьАтрибут("http://schemas.xmlsoap.org/soap/envelope/", ПрефиксСОАП + ":actor");
УзелDOM.Значение = "http://alfastrah.ru/interplat4/partners/interaction/";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
Security = Header.ДобавитьДочерний(ЭлементDOM);
// BinarySecurityToken - узел, который будет хранить открытый ключ.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменСекрет, ПрефиксСекрет + ":BinarySecurityToken");
ТекстDOM = ДокументDOM.СоздатьТекстовыйУзел("#Certificate_ENCODE_BASE64");
ЭлементDOM.ДобавитьДочерний(ТекстDOM);
УзелDOM = ДокументDOM.СоздатьАтрибут(ПространствоИменУтилити, ПрефиксУтилити + ":Id");
УзелDOM.Значение = ИД;
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
УзелDOM = ДокументDOM.СоздатьАтрибут("ValueType");
УзелDOM.Значение = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
УзелDOM = ДокументDOM.СоздатьАтрибут("EncodingType");
УзелDOM.Значение = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
BinarySecurityToken = Security.ДобавитьДочерний(ЭлементDOM);
// Signature - узел, который будет хранить информацию о том, что было подписано,
// подпись, ключи, используемые для создания подписи,
// и место для сохранения произвольных данных.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "Signature");
Signature = Security.ДобавитьДочерний(ЭлементDOM);
// SignedInfo - информация о подписываемых элементах.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "SignedInfo");
SignedInfo = Signature.ДобавитьДочерний(ЭлементDOM);
// CanonicalizationMethod - алгоритм приведения к каноническому виду.
// Для СМЭВ "http://www.w3.org/2001/10/xml-exc-c14n#".
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "CanonicalizationMethod");
УзелDOM = ДокументDOM.СоздатьАтрибут("Algorithm");
УзелDOM.Значение = "http://www.w3.org/2001/10/xml-exc-c14n#";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
SignedInfo.ДобавитьДочерний(ЭлементDOM);
// SignatureMethod - идентификатор алгоритма подписи.
// Для СМЭВ "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411".
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "SignatureMethod");
УзелDOM = ДокументDOM.СоздатьАтрибут("Algorithm");
УзелDOM.Значение = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
SignedInfo.ДобавитьДочерний(ЭлементDOM);
// Reference - атрибут URI, содержащий ссылку на подписываемый элемент в документе.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "Reference");
УзелDOM = ДокументDOM.СоздатьАтрибут("URI");
УзелDOM.Значение = "#" + ДанныеИД;
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
Reference = SignedInfo.ДобавитьДочерний(ЭлементDOM);
// Transforms - преобразования, которые следует применить к подписываемым элементам.
// В данном случае - приведение к каноническому виду.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "Transforms");
Transforms = Reference.ДобавитьДочерний(ЭлементDOM);
// Transform - см. описание Transforms.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "Transform");
УзелDOM = ДокументDOM.СоздатьАтрибут("Algorithm");
УзелDOM.Значение = "http://www.w3.org/2001/10/xml-exc-c14n#";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
Transforms.ДобавитьДочерний(ЭлементDOM);
// DigestMethod - идентификатор алгоритма хэширования.
// Для СМЭВ "http://www.w3.org/2001/04/xmldsig-more#gostr3411".
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "DigestMethod");
УзелDOM = ДокументDOM.СоздатьАтрибут("Algorithm");
УзелDOM.Значение = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
Reference.ДобавитьДочерний(ЭлементDOM);
// DigestValue - узел будет содержать хэш-значение подписываемых элементов.
// Данный элемент следует оставить пустым.
// Его значение будет заполнено при создании подписи.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "DigestValue");
Reference.ДобавитьДочерний(ЭлементDOM);
// SignatureValue - узел будет содержать значение подписи.
// Данный элемент следует оставить пустым.
// Его значение будет заполнено при создании подписи.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "SignatureValue");
SignatureValue = Signature.ДобавитьДочерний(ЭлементDOM);
// KeyInfo - узел будет содержать информацию о сертификате ключа подписи.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменЭП, "KeyInfo");
KeyInfo = Signature.ДобавитьДочерний(ЭлементDOM);
// SecurityTokenReference - узел будет содержать ссылку на сертификат.
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменСекрет, ПрефиксСекрет + ":SecurityTokenReference");
SecurityTokenReference = KeyInfo.ДобавитьДочерний(ЭлементDOM);
// Reference - атрибут ValueType содержит значение
// "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3".
// Атрибут URI содержит ссылку на уникальный идентификатор
// сертификата (такой же, как указан в элементе BinarySecurityToken).
ЭлементDOM = ДокументDOM.СоздатьЭлемент(ПространствоИменСекрет, ПрефиксСекрет + ":Reference");
УзелDOM = ДокументDOM.СоздатьАтрибут("ValueType");
УзелDOM.Значение = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3";
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
УзелDOM = ДокументDOM.СоздатьАтрибут("URI");
УзелDOM.Значение = "#" + ИД;
ЭлементDOM.УстановитьУзелАтрибута(УзелDOM);
SecurityTokenReference.ДобавитьДочерний(ЭлементDOM);
///////////////////////////////////////////////////
// Работа с Body
Body = Корень.ПолучитьЭлементыПоИмени(ПрефиксСОАП, "Body")[0];
УзелDOM = ДокументDOM.СоздатьАтрибут(ПространствоИменУтилити, ПрефиксУтилити + ":Id");
УзелDOM.Значение = ДанныеИД;
Body.УстановитьУзелАтрибута(УзелDOM);
///////////////////////////////////////////////////
// Формирование XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку(Новый ПараметрыЗаписиXML("UTF-8"));
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(Корень, ЗаписьXML);
СформированныйДокумент = ЗаписьXML.Закрыть();
Возврат СформированныйДокумент;
КонецФункции // СоздатьСтруктуруWSSecurityДляSOAPсообщения()
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот