Регистрация...

Eserv Forum / E4 / Proxy / Проблема соединения с сервисом по HTTPS

recent wikipost // (v1)
Продукты и услуги Скачать Документация Купить Поддержка Форумы Партнёрам Статьи О компании
Доброго времени суток. Помогите, пожалуйста, очень горящая проблема!
Суть:
У нас в Республике Беларусь вводится подача электронных счет-фактур в госорганы через WEB-сервис. Для этого авторы сервиса создали набор VBS-скриптов, при помощи которых происходит авторизация пользователя при помощи криптопровайдера Avest, подключение к сервису и т.д. На прямом соединении с инетом всё это работает замечательно, коннект на адрес сервиса идёт моментально.
https://vat.gov.by:4443/InvoicesWS/services/InvoicesPort, прописан в скрипте

Но через E4 ни в какую.
Понимаю, что такой запрос до E4 просто не доходит, VBS полностью игнорит настройки прокси на компьютере. Естественно дописываю в цепочку адрес прокси:
http://адрес_прокси:80/https//vat.gov.by:4443/InvoicesWS/services/InvoicesPort.

Ничего. Соображаю, что не происходит авторизация на прокси, дописываю в цепочку имя пользователя и логин на прокси:
https://имя_пользователя:логин@адрес_прокси:80/https//vat.gov.by:4443/InvoicesWS/services/InvoicesPort.
Теперь в stat.txt вижу, что IP-авторизация на прокси прошла, но больше нигде никаких следов. Пробую исключить DNS и прописываю IP-адрес сервиса напрямую:
https://имя_пользователя:логин@адрес_прокси:80/IP-адрес_сервиса:4443/InvoicesWS/services/InvoicesPort.
Результат тот же, т.е. разнообразные ошибки :10060, 10061, 11004.
Пробую пробросить порт на Е4. Теперь запрос проще.
https://имя_пользователя:логин@адрес_прокси:4443

Результат нулевой, только ошибка другая : SSPI Binding.Receive returns error #-2146893052(0x80090304): The Local Security Authority cannot be contacted (Код 0xE82A0187).
Что еще придумать не знаю. Из-за цейтнота (у нас тут еще и деноминация на носу, и то и это с 1-го июля, да плюс текучка) мозги набекрень.
 
Комментарии к этой версии (31.05.2016 11:20) [~Moor] 87c29736
АвторДатаТекстtags
ac31.05.2016 12:58
ред: 31.05.2016 13:27
Moor пишет: Естественно дописываю в цепочку адрес прокси:http://адрес_прокси:80/https//vat.gov.by:4443/InvoicesWS/services/InvoicesPort

Какая программа должна разобрать эту "естественную" запись? Eproxy такую не понимает.

Moor пишет: VBS полностью игнорит настройки прокси на компьютере

Вот тут как раз естественным является предположение, что VBS НЕ игнорирует настройки прокси, т.к. все MS-программы работают через одни и те же сетевые компоненты, поддерживающие настройки прокси (сделанные в IE). Надо по логам прокси (не stat, а http-proxy) смотреть, какие запросы идут при попытках.

А авторизация пользователя при помощи криптопровайдера Avest как происходит? Может это он через прокси не умеет?
wikipost
Moor31.05.2016 14:14
ред: 31.05.2016 14:20
OK, пробуем.
Запрос:
Лог из окна выполнения скрипта:
Авторизация успешна Подключение к https://vat.gov.by:4443/InvoicesWS/services/InvoicesPort Ошибка подключения: Ошибка HTTP Socket Error # 11004 (Код 0xE82A0187)

В \HTTP-Proxy\2016-05-31-log.txt пусто (с моего IP запросов нет)
В STAT\201605stat.txt есть строка
2016-05-31 13:45:52;192.168.0.102;HTTP-PROXY;5996;22316;22196;5912;120047;temp;belagro.by;80;40-8D-5C-C2-97-CF;IpMacAuth
Больше нигде никаких упоминаний.Да, вы правы, я тупанул на каком-то этапе экспериментов с подключением, прокси взялось из системы, до авторизации доходит. Но дальше ступор. Предполагаю, что если бы дело было в Авесте (который у нас используется повсеместно во всех клиент-банковских, статистических и прочих программах — да, не скриптах, как в этом случае), я бы получил какой-то внятный отлуп от сервиса. Возможно ошибаюсь. Направьте, пожалуйста дальше — куда копать?
wikipost
Moor31.05.2016 14:19
На всякий случай вот начальный фрагмент VBS-скрипта. Авторизация и подключение в самом конце.
' signAndUploadDir.vbs - Подписание и отправка счет-фактур НДС из папки ' Использование: ' "cscript signAndUploadDir.vbs [-d] <url АС портала> <входная папка> <выходная папка>" ' Опция -d позволяет удалить файл из исходной папки Dim EVatService Dim InvVatXml Dim res Dim xsd dim shouldDeleteFile dim url dim inFolder dim outFolder dim pos shouldDeleteFile = 0 Set objArgs = WScript.Arguments if objArgs.count < 3 then WScript.Echo "Подписание и отправка счет-фактур НДС" WScript.Echo "Использование:" WScript.Echo "cscript signAndUploadDir.vbs [-d] <url АС портала> <входная папка> <выходная папка>" WScript.Echo "Опция -d позволяет удалить файл из исходной папки" WScript.Quit end if pos = 0 if objArgs(pos) = "-d" then shouldDeleteFile = 1 pos = pos + 1 end if url = objArgs(pos) pos = pos + 1 inFolder = objArgs(pos) pos = pos + 1 outFolder = objArgs(pos) 'Создание COM object для чтения файлов Set oFSO = CreateObject("Scripting.FileSystemObject") 'Создание COM object EInvVatService.Connector Set EVatService = CreateObject("EInvVatService.Connector") res = EVatService.Login("", 0) if res = 0 then WScript.Echo "Авторизация успешна" else WScript.Echo "Ошибка авторизации: " & EVatService.LastError & " (Код 0x" & Hex(res) & ")" WScript.Quit end if WScript.Echo "Подключение к " + url res = EVatService.Connect(url) if res = 0 then WScript.Echo "Подключение успешно" else WScript.Echo "Ошибка подключения: " & EVatService.LastError & " (Код 0x" & Hex(res) & ")" WScript.Quit end if
wikipost
Moor31.05.2016 14:41
Что интересно — вот такой вариант (замена адреса IP-адресом) дает такой результат:
Авторизация успешна Подключение к https://185.32.226.170:4443/InvoicesWS/services/InvoicesPort Ошибка подключения: Ошибка HTTP Socket Error # 10060 Connection timed out. (Код 0xE82A0187)
wikipost
ac31.05.2016 15:35
Да, выходит, что EInvVatService.Connector не использует настройки прокси или не умеет работать через прокси.

11004 — это "имя не найдено в DNS". При работе через прокси разрешение имён в DNS делает сам прокси, и клиент сам по себе не может получить ошибку 11004; разве что в качестве прокси указано неразрешимое локально имя вместо IP).

10060 — это "таймаут подключения". В этой попытке вы указали IP вместо имени, поэтому об 11004 EInvVatService.Connector больше не спотыкается, но получает закономерный таймаут при попытке соединения напрямую вместо прокси.
wikipost
ac31.05.2016 15:41
Тогда остаётся делать TCPMAP 4443 185.32.226.170 4443 (потом перезапустить acWEB или Eproxy), в скрипте в url вернуть имя портала, но на той машине, откуда пытаетесь подключиться, отредактировать файл hosts, чтобы этому имени соответствовал не 185.32.226.170, а локальный IP-адрес вашего Eproxy.
wikipost
Moor31.05.2016 16:13
ред: 31.05.2016 16:14
Решение действительно интересное. До проброса порта додумался, а до этого нет.
Но не работает, зараза, и по-прежнему только одна строка в stat.txt. Всё равно 10060
Авторизация успешна Подключение к https://vat.gov.by:4443/InvoicesWS/services/InvoicesPort Ошибка подключения: Ошибка HTTP Socket Error # 10060 Connection timed out. (Код 0xE82A0187)
Конечно сейчас проверю еще раз всё ли я правильно наваял. Даже не знаю, что и думать. Если бы это был глюк/недоработка самих разработчиков портала, их бы уже пол-республики с потрохами съела. Поскольку более-менее средних/крупных предприятий/организаций/фирм, использующих прокси у нас ооочень много, и с 1-го июля это должно бы работать у всех. Сегодня уже тестирование портала закрыто, буду продолжать эксперименты завтра с утра.
wikipost
ac31.05.2016 16:33
Что говорит ping.exe vat.gov.by при запуске из консоли на этой машине? И что говорит telnet.exe ip.адрес.вашего.прокси 4443 там же?
wikipost
ac31.05.2016 16:35
Moor пишет: и по-прежнему только одна строка в stat.txt

В stat.txt можно уже не искать обращения к этому url, т.к. они после перенастроек должны идти не через http-proxy, а через tcpmap.
wikipost
Moor01.06.2016 10:33
ред: 01.06.2016 10:40
Уфффф.
Вчера не ответил, поскольку с 16 часов тестирование сервиса закрывается и он недоступен.
Сегодня с утра они выложили обновление своего EInvVatService, через который все их скрипты и работают. По описанию появилась поддержка x64. Естественно начал все эксперименты заново. Результат:

  • Вариант 1. Без прокси. На прямом соединении всё по-прежнему работает со свистом.
  • Вариант 2. С прокси. Ничего не меняем — не делаем проброс порта, не трогаем URL в запросе, не трогаем HOSTS. Не работает. Не удивлён — у нас все банковские и прочие приблуды работают только при пробросе порта и соответственно изменении URL на наш прокси.
  • Вариант 3. С прокси. Делаем проброс порта. Естественно URL в запросе меняем на адрес нашего прокси. HOSTS не трогаем. Т.е. так, как у нас работают все банковские и прочие приблуды. Работает!
  • Вариант 4. С прокси. Делаем проброс порта. Меняем HOSTS (назначаем их URL на адрес нашего прокси), в запросе URL оставляем их родной. Работает!
Спасибо вам большое за участие, помощь и ещё один способ обхода (с правкой HOSTS) — он будет незаменим для случая, когда сам URL поменять невозможно.
Ещё раз СПАСИБО!
Полагаю, ветку можно удалить.
wikipost
ac01.06.2016 11:18
ред: 01.06.2016 11:20
Ветку лучше оставить, кому-нибудь пригодится. Если что-то приватное в логах — можете отредактировать свои посты.

По поводу правки HOSTS — для http через TCPMAP это обычно приходится делать, т.к. при замене URL целевого сайта на адрес прокси целевому сайту придёт адрес прокси в заголовке "Host:" протокола http, что может привести к неправильной обработке запроса: если на сервере несколько сайтов на одном IP, то он выбирает сайт по заголовку "Host:".
wikipost
Работает на Eserv/5.05555 (05.06.2016)