wss- security soap client из 1С

1. ZMGMSC 73 31.07.18 14:07 Сейчас в теме
Требуется подключиться к веб сервису защищенному по WS-Security
1С это сделать не может.
Помогите разобраться в этом воспросе.
Web прокси и Http соединение уже пробовал - не помогло.
Может кто то может взяться за такую обработку ?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Timur.V 80 31.07.18 14:17 Сейчас в теме
 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. Обратитесь к системному администратору");
    КонецПопытки;
    Возврат Прокси;
Показать
3. ZMGMSC 73 31.07.18 14:20 Сейчас в теме
(2да, так делал. Не проходит авторизация
Надо указывать тип авторизации и шифровать пароль.
проблема в указании типа авторизации.
4. ZMGMSC 73 31.07.18 14:25 Сейчас в теме
Новый WSПрокси не подходит
проверено.

у нет заголовков.

пробовал http соединение и формировал текст запроса.
но пока вопрос остается открыт
5. Timur.V 80 31.07.18 14:26 Сейчас в теме
В папке bin есть файл cacert.pem, туда его надо вписать.
Более подробно можно почитать тут: https://infostart.ru/public/79494/

В общем: вам понадобится OpenSSL - с его помощью надо будет преобразовать полученный сертификат в удобный для 1С вид (DER) и получить отпечаток MD5. Вот это содержимое надо будет добавить в файл cacert.pem в подобии с теми, что там уже есть.
6. Aitbay 31.07.18 14:33 Сейчас в теме
ЗащищенноеСоединение = Новый ЗащищенноеСоединение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Запрос);
7. Aitbay 31.07.18 14:34 Сейчас в теме
вот рабочий код подключения к оракловой базе мжт такая реализация поможет
8. ZMGMSC 73 31.07.18 14:38 Сейчас в теме
Wss password type - PasswordDigest

это ключевой параметр
9. ZMGMSC 73 31.07.18 14:44 Сейчас в теме +5 $m
обертка для сообщения не мое, с интернета автора не помню.

// Функция формирует шаблон 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сообщения()
Оставьте свое сообщение

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