|
Windows 10, WinHttpRequest и сертификаты | ☑ | ||
---|---|---|---|---|
0
fjay69
09.08.19
✎
20:13
|
Добрый вечер. Потребовалось выполнять зашифрованные POST запросы. В виду некоторых обстоятельств нет возможности использовать встроенные механизмы платформы 1с 8.3, поэтому делал через WinHttpRequest. И если на Windows 7 всё работает, то же самое на Windows 10 работать не хочет. Вот примерный код:
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
После вызова метода Send(Запрос) вылезает исключительная ситуация "Произошла ошибка безопасности". Пробовал msxml2.serverxmlhttp - то же самое. Обращение к тому же адресу через веб-браузер проходит без проблем. Помогите, пожалуйста. |
|||
1
Глок 17
09.08.19
✎
21:39
|
Может сертификат нужно добавить в папку "доверенные" или как-то так. Не помню уже. Как предположение.
|
|||
2
Garykom
гуру
09.08.19
✎
22:53
|
(0) "CURRENT_USER\My\123456" - вот тут ошибка или у пользователя от которого запускается WinHttp нет прав доступа на ветку реестра с сертификатом.
|
|||
3
fjay69
10.08.19
✎
10:59
|
(2) Повторяю, вышеприведённый код работает под Windows 7, но не работает под Windows 10. Код запускаю под собой на домашнем компьютере. Уж у меня-то должны быть все права.
|
|||
4
ShAV
10.08.19
✎
12:10
|
Есть там какая-то бяка в Windows 10. Я пробовал только без компонент. Подключал библиотеку openssl и была непонятная ошибка именно на этапе отправки запроса. Как решить не нашел, но понял, что это что-то с работой сертификатами. Такое впечатление, что винда закрывает сокет в момент непосредственно перед отправкой запроса из-за сертификатов, хотя до этого без проблем позволила открыть и установить соединение с удаленным сервером. Ответа в инете не нашел.
Пока забросил из-за текущей работы с 1С. |
|||
5
fjay69
10.08.19
✎
13:08
|
Попробовал в C# через HttpWebRequest. Соединение проходит, если установить SecurityProtocol = TLS или TLS11. При TLS12 И SSL3 даёт "Не удалось создать защищенный канал SSL/TLS".
|
|||
6
fjay69
10.08.19
✎
13:15
|
Я это сделал! Добавляем в код следующее:
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
Этот код устанавливает протокол безопасности TLS 1.1 и запрос проходит. |
|||
7
Garykom
гуру
10.08.19
✎
16:26
|
Просто:
WinHttp.Option(9, 512); Не срабатывает? Обязательно надо через внешний скрипт установить? |
|||
8
oleg_km
10.08.19
✎
17:23
|
(7) Так вроде не срабатывает. Приходится извращаться со скриптами. Я вообще WinHTTP API заворачивал в КОМ. Сейчас пользуюсь дот нетом.
(5) попробуй по методу Сергея Смирнова "подключить" к 1С .NET. Многие вещи сразу станет делать проще |
|||
9
Garykom
гуру
10.08.19
✎
17:56
|
(8) Это требуется ВК каким то образом доставить, зарегать и только потом можно из 1С юзать, если речь про
http://catalog.mista.ru/public/448668/ Не спорю что потом просто супер вся мощь классов .Net есть. Можно конечно и без ВК извратиться через http://catalog.mista.ru/public/16898/ http://forum.script-coding.com/viewtopic.php?id=1139 |
|||
10
Сияющий в темноте
10.08.19
✎
18:41
|
там,по идее, set_Option должно отработать,т.к.1с не умеет корректно работать с Lvalue.
|
|||
11
fjay69
11.08.19
✎
11:17
|
(7) Да, нужно извращаться со скриптами.
(8) Знаю эту тему, но разбираться некогда. Вот ещё любопытной информации. (6) Не будет работать под Windows 7. Точнее, будет, но потребуется зарегить COM-Компоненту (https://osergey.ru/ru/call-32-bit-com-objects-to-side-64-bi/#more-508), а также заменить 512 (TLS 1.1) на 128 (TLS 1.0). Посему возникла надобность определять версию ОС. Как правильно это сделать? Если Лев(СистемнаяИнформация.ВерсияОС, 11)="version 6.2" Тогда //Windows 10 |
|||
12
fjay69
11.08.19
✎
12:37
|
Шелл = Новый COMОбъект("WScript.Shell");
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |