Форум OlegON > Программы и оборудование для автоматизации торговли > Маркировка

Честный знак, API... WinHttp.WinHttpRequest: Ошибка поддержки безопасных каналов : Маркировка

22.11.2024 4:46


13.04.2022 13:51
Добрый день!

Я конечно понимаю все, хакерские атаки на ИС, в том числе и на Честный знак... Тут, все подробно расписано: https://olegon.ru/showthread.php?t=36795
Но, что-то уж очень странно себя ведут сервера честного знака, может я чего-то не понимаю, и можно все-таки как-то это обойти?
Давно(с самого начала, уже года два) рабочая обработка, для работы с API CRPT нужно получить токен...
Отправляю GET запрос, на который должен получить в ответ пару uuid и code, в структуре JSON, для дальнейшего подписания их ЭЦП, отправки подписанного обратно и получения токена для дальнейшей работы...
Но, в ответ получаю: "WinHttp.WinHttpRequest: Ошибка поддержки безопасных каналов"
Ладно, предположим, не работает...
Но, открываю тот-же УРЛ в браузере,



и вижу такой ответ:

Код:
<KeyForSignDto class=" FB_FW_ext Bco">
<uuid>c2ebe5ed-4664-49c2-a09f-0b02f23a3c1f</uuid>
<data>ZYOQNNJIMUAINBXNCIMKSGSVWPNHLN</data>
</KeyForSignDto>
Вроде, вся нужная инфа в ответе есть... Это как раз эта "ключевая пара"... Но, это браузером... Почему GET запрос не отрабатывает, возвращает ошибку? Может что-то в параметрах запроса нужно добавить? Еще раз, раньше это все работало...
Я понимаю, в связи с объективными причинами не работало бы совсем, но, через браузер то работает..
13.04.2022 14:07
Цитата:
MWWRuza Отправляю GET запрос
Откуда отправляешь? это не какое-то старое ... которое с сертификатами не дружит?
Решил погуглить... так и есть

Как оказалось, далеко не все знают, что причина этих ошибок кроется в обновлении протокола шифрования на стороне сайта. Сейчас повсеместно начинает использоваться протокол TLS версии 1.2, поддержка которого в 1С полноценно начата с релиза 8.3.9

Поэтому для тех, кто использует встроенные средства 1С для работы с сайтом, достаточно обновить релиз 1С предприятия, и проблема решится сама собой.

Но часто мне попадаются обработки работы с сайтом, которые используют средства Windows: объекты класса "WinHTTP.WinHTTPRequest.5.1" или "MSXML2.ServerXMLHTTP.6.0" и т.п. В этом случае необходимо активировать поддержку протокола TLS 1.2 в самой Windows.

Для этого достаточно внести в реестр следующие записи, после чего перезагрузить Windows:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp]
"DefaultSecureProtocols"=dword:00000800

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp]
"DefaultSecureProtocols"=dword:00000800

Небольшое замечание к двум последним параметрам. В указанном коде указано значение 00000800 - это значение активирует протокол TLS 1.2 по умолчанию. Если необходимо использовать TLS 1.1 то значение необходимо заменить на 00000200, а если оба протокола, то на 00000A00.

13.04.2022 14:15
Цитата:
MWWRuza Может что-то в параметрах запроса нужно добавить?
возможно setoption для ссл\тсл

дополнительно к предыдущему посту OlegON
Update to enable TLS 1.1 and TLS 1.2 as default secure protocols in WinHTTP in Windows

13.04.2022 14:34
Олег, спасибо, теперь это место "проскакивает", но, возвращает ошибку 451...
Поискал, что это такое, и вообще офигел:

Цитата:
HTTP-код ответа 451 Unavailable For Legal Reasons указывает, что пользователь запросил ресурс, который недоступен по юридическим причинам, например веб-страница, заблокированная из-за судебных исков.
Все-таки, это похоже "происки врагов"
13.04.2022 14:41
Опять-же, не понятно, почему через браузер работает в таком случае...

Кстати, с твоей базой ШК по API работает отлично и без этих добавок в реестр, и сейчас. Возможно по тому, что токен сразу "в готовом виде" в запрос передаем...
13.04.2022 14:47
Цитата:
OlegON Откуда отправляешь?
Отправляю то я из 1С, но, из 7.7, которая в принципе с этим работать не умеет, поэтому через COM через родные виндовые объекты(Windows-7)...
Вот так:
Код:
	WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
	WinHttp.Option(2,"utf-8");
	WinHttp.SetTimeouts(0, 0, 0, 0);
	Url = "https://" + УРЛ + ПрефиксВерсии + "auth/cert/key";	
	WinHttp.Open("GET", Url, 1);
	WinHttp.SetRequestHeader("Content-Type", "application/json");
	WinHttp.SetRequestHeader("Accept-Charset", "utf-8");
	Рез = WinHttp.Send();
	RequestTimeout = 40;
	Ответ = "";
	Попытка
	    Рез = WinHttp.WaitForResponse(RequestTimeout);
	Исключение
	    Рез = 0;
	    Ответ = ОписаниеОшибки();
	КонецПопытки;
	Если Ответ <> "" Тогда
		Сообщить("Ошибка: " + Ответ);
		Ответ = "";	    
	КонецЕсли;
	Если Рез = -1 Тогда
	    Статус = WinHttp.status();
	    Ответ = СокрЛП(WinHttp.ResponseText());
	КонецЕсли;
13.04.2022 14:56
Цитата:
MWWRuza почему через браузер работает в таком случае
ну так прикинься браузером :)

SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.59"
13.04.2022 14:59
Вот здесь: WinHttp.WaitForResponse(RequestTimeout) возвращается "-1", как и должно быть, так, что запрос теперь отрабатывает нормально, а дальше, тут: WinHttp.status(), возвращает "451", соответственно, ответ пустой...
13.04.2022 15:00
Цитата:
student ну так прикинься браузером :)
Попробую
13.04.2022 15:10
у меня на штрих-кодах включены большинство протоколов, включая чистый HTTP и много старых шифрователей... а тут ещё семёрка...
Часовой пояс GMT +3, время: 04:46.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.