|
Веб-сервер, https. Как указать необходимый сертификат? | ☑ | ||
---|---|---|---|---|
0
be-may
19.11.12
✎
15:46
|
Есть веб-сервис.
Обращаюсь к нему через защищенное соединение, использую сертификат с закрытым ключем. Мне нужно послать xml запрос серверу (методом POST) и в ответ получить xml ответ. ------ Сейчас все работает через xl = Новый COMОбъект("Microsoft.XMLHTTP"); но, проблема в том, что каждый раз при запуске браузера появляется окно с выбором сертификата, и требуется участие пользователя.. Хотелось от этого уйти. Как бы так указать, что использовать необходимо конкретный сертификат? ----- пробую сделать через WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Option(2,"Windows-1251"); WinHttp.SetClientCertificate("тут_пишу_имя_сертификата_из_ЛИЧНЫХ_сертификатов"); и все вроде бы прокатывает, но дойдя до отправки xml я не получаю ничего в ответ.. // (дело происходит на 8.1) Итак, как указать конкретный сертификат для перемнной xl ? |
|||
1
oleg_km
19.11.12
✎
16:45
|
У меня именно так и работало. Там где устанавливается использование SSL включено?
|
|||
2
be-may
20.11.12
✎
08:27
|
(1) Олег (? правильно же имя пишу), вот именно вы мне и нужны. Вчера гору тем на форуме перелопатила на тему установки соединения с веб серверами и практически в каждой высказывались вы.
Подозреваю, что уже не одну собаку съели на этом. Если ---- Именно так это как? Через "WinHttp.WinHttpRequest ? SSL 2.0 выключено, SSL 3.0 включено |
|||
3
be-may
20.11.12
✎
08:47
|
Расскажу чуть подробней.
Есть некие данные. Есть несколько сертификатов. Мне нужно часть данных отправить с одним сертификатом, часть данных с другим сертификатом.. Пробовала, кстати, через WS ссылку делать с прописыванием корневого сертификата в файл сертификатов, который лежит в BIN - в итоге не получилось у меня |
|||
4
SergeyKB
20.11.12
✎
08:57
|
(0)
посмотрите здесь : |
|||
5
SergeyKB
20.11.12
✎
08:57
|
||||
6
SergeyKB
20.11.12
✎
08:57
|
действовал по аналогии, всё сработало
|
|||
7
be-may
20.11.12
✎
09:14
|
Если использовать WinHttp.WinHttpRequest , то у меня проблема не с сертификатом, а с тем, что я не могу получить и прочитать от сервера xml
|
|||
8
be-may
20.11.12
✎
09:18
|
Сейчас примерно такой код.
Код рабочий. В самом начале запускается браузер, выбирается сертификат Не устраивает в этом именно то, что нужно выбирать руками сертификат. Раньше он был один - и в принципе, это не было проблемой, но теперь их стало 2 с перспективой увеличения количества сертификатов дальше. Поэтому, хочется как-то автоматизировать процесс по максимуму Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); xl = Новый COMОбъект("Microsoft.XMLHTTP"); //xl.setOption(2, 13056); xl.Open("GET","https://dealer.beeline.ru/dealer/WebService/DOL.asmx",0); xl.send(); кол =0; Статус = xl.readyState; Пока Статус <> 4 Цикл // ... // здесь обработка ожидания //.... КонецЦикла; Если xl.status<>200 тогда Сообщить("Ошибка авторизации"); Возврат; КонецЕсли; Пока Выборка.Следующий() Цикл // Формируем XML файл для отправки хмл = Новый COMОбъект("Msxml2.DOMDocument"); хмл.appendChild(хмл.createProcessingInstruction("xml", "version='1.0' encoding='utf-8'")); rootNode = хмл.appendChild(хмл.createElement("soap:Envelope")); rootNode.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"); rootNode.setAttribute("xmlns:xsd","http://www.w3.org/2001/XMLSchema"); rootNode.setAttribute("xmlns:soap","http://schemas.xmlsoap.org/soap/envelope/"); soapBody = rootNode.appendChild(хмл.createElement("soap:Body")); ReguestStatuses = soapBody.appendChild(хмл.createElement("ReguestStatuses")); ReguestStatuses.setAttribute("xmlns","http://beeline.ru/ws/dol/2006"); requests = ReguestStatuses.appendChild(хмл.createElement("requests")); Request = requests.appendChild(хмл.createElement("Request")); КодТочки =Выборка.КодТочки; Request.setAttribute("PointCode",КодТочки); Request.setAttribute("Code",Сред(ВЫборка.НомерКонтракта,2)); хмл.save("c:\otladka_statusov_8_1.xml"); xl.Open("POST","https://dealer.beeline.ru/dealer/WebService/DOL.asmx",0); xl.send(хмл); хмл = xl.responseXML; // .... // далее обработка полученной хмл // .... КонецЦикла; |
|||
9
be-may
20.11.12
✎
09:28
|
далее попробовала сделать так :
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Option(2,"Windows-1251"); WinHttp.SetClientCertificate("_Тут_Имя_серта_"); WinHttp.Open("GET","https://dealer.beeline.ru/dealer/WebService/DOL.asmx",0); WinHttp.setRequestHeader("Content-Type","text/xml; charset=utf-8"); WinHttp.Send(); Если WinHttp.status<>200 тогда Сообщить("Ошибка авторизации"); Возврат; КонецЕсли; и далее аналогично как в (8) Авторизация прошла успешно, но я не могу прочитать полученный сервером в ответ хмл.. некуда его принять :) И вообще пока не сформировала заголовок, сервер мне писал "Unsupported Media Type" в ответ на посланную ему хмл --- Вот если бы у COMОбъект("Microsoft.XMLHTTP") был метод SetClientCertificate как у WinHttp.WinHttpRequest или у WinHttp.WinHttpRequest было бы куда принимать хмл... Скажите, может есть что-то такое? |
|||
10
oleg_km
20.11.12
✎
10:19
|
(9) Не понимаю вопроса, ответ сервера находится в ResponseText, запрос отправляется парамтром в Send
ИмяСертификата = "Польских Светлана Валерьевна"; АдресВебСервиса = "https://filials.payment.ru:9443/OLWSWM/services/OLWS?WSDL"; обИнтернет = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); обИнтернет.SetClientCertificate(ИмяСертификата); обИнтернет.Open("GET", АдресВебСервиса, Ложь); обИнтернет.Send(); Сообщить(обИнтернет.ResponseText); msdn почитайте, там достаточно разжевано |
|||
11
be-may
20.11.12
✎
11:56
|
(10) а как мне отправить хмл туда?
|
|||
12
oleg_km
20.11.12
✎
12:00
|
(11) В параметре команды Send()
ИмяСертификата = "Польских Светлана Валерьевна"; АдресВебСервиса = "https://filials.payment.ru:9443/OLWSWM/services/OLWS?WSDL"; обИнтернет = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); обИнтернет.SetClientCertificate(ИмяСертификата); обИнтернет.Open("GET", АдресВебСервиса, Ложь); обИнтернет.Send("ВОТ СЮДА ПИШИТЕ ТЕКСТ ВАШЕГО XML"); Сообщить(обИнтернет.ResponseText); |
|||
13
be-may
20.11.12
✎
13:08
|
(12) все.... решила..
Знаешь в чем дело было ? (пишу для тех, кто будет идти по моим граблям..) ---- Я сначала создала переменную WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); затем Open , setRequestHeader и Send . Сенд был пустой - просто для авторизации.. Если авторизация проходила (статус 200), то все ОК и дальше выполнялись новые запросы. А в запросах было снова обращение к ТОЙ ЖЕ переменной WinHttp . Я считала, что я то ее уже создала, заголовки обозначила, значит незачем новую переменную создавать.. Убрала авторизацию - и все стало хорошо. Сервер стал выдавать нужную хмл. -- Олегу отдельное человеческое спасибо ) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |