1с произошла исключительная ситуация winhttp winhttprequest ошибка поддержки безопасных каналов
Я конечно понимаю все, война, хохлы, хакерские атаки на ИС, в том числе и на Честный знак. Тут, все подробно расписано: https://olegon.ru/showthread.php?t=36795
Но, что-то уж очень странно себя ведут сервера честного знака, может я чего-то не понимаю, и можно все-таки как-то это обойти?
Давно(с самого начала, уже года два) рабочая обработка, для работы с API CRPT нужно получить токен.
Отправляю GET запрос, на который должен получить в ответ пару uuid и code, в структуре JSON, для дальнейшего подписания их ЭЦП, отправки подписанного обратно и получения токена для дальнейшей работы.
Но, в ответ получаю: "WinHttp.WinHttpRequest: Ошибка поддержки безопасных каналов"
Ладно, предположим, не работает.
Но, открываю тот-же УРЛ в браузере,
и вижу такой ответ:
Вроде, вся нужная инфа в ответе есть. Это как раз эта "ключевая пара". Но, это браузером. Почему 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\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.
Я конечно понимаю все, война, хохлы, хакерские атаки на ИС, в том числе и на Честный знак. Тут, все подробно расписано: https://olegon.ru/showthread.php?t=36795
Но, что-то уж очень странно себя ведут сервера честного знака, может я чего-то не понимаю, и можно все-таки как-то это обойти?
Давно(с самого начала, уже года два) рабочая обработка, для работы с API CRPT нужно получить токен.
Отправляю GET запрос, на который должен получить в ответ пару uuid и code, в структуре JSON, для дальнейшего подписания их ЭЦП, отправки подписанного обратно и получения токена для дальнейшей работы.
Но, в ответ получаю: "WinHttp.WinHttpRequest: Ошибка поддержки безопасных каналов"
Ладно, предположим, не работает.
Но, открываю тот-же УРЛ в браузере,
и вижу такой ответ:
Вроде, вся нужная инфа в ответе есть. Это как раз эта "ключевая пара". Но, это браузером. Почему 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\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.
Пытаюсь сделать по аналогии с рассылкой смс:
Помогите, куда смотреть, где копать?
(2) Да хоть все закомментировать и оставит только Open и Send - те же ошибки:
все то же самое(
чтобы понять что там за неверный ответ по 80му порту, поставьте программу FiddlerEverywhere чтобы посмотреть что шлет сервер
А Ваш Option(9, 80) - он что значит?
так было при отправке смс
Это конечно если проблема в версии TLS. Какой адрес портала? Могу проверить - делает ли он отлуп если TLS меньше 1.2 его просить.
(13)
похоже проблема именно здесь
server 2008 - 'то то же что Win-7. Если проблема что сейчас пытается TLS 1.0 а в ответ облом (портал требует 1.1 или 1.2 и отказывается работать по TLS 1.0) - то лечится правкой реестра.
все эти опции ничего не меняют(
WinHttp.Open("GET", "https://telegram.org", false);
или
WinHttp.Open("GET", "https://nationalbank.kz/rss/get_rates.cfm?fdate=15.11.2020", false);
Эти порталы тоже не разрешают старый TLS - т.е. ошибка должна быть такая же. И эти порталы начинают работать, если проделать приведенные выше действия. Проверено на Windows Server 2008 R2 Enterprise SP1 (Build 7601)
Заметил, что когда отладчик запущен, то запрос отрабатывал без проблем.
Единственно, я еще перед вызовом Send() указал параметры Прокси-сервера
Fiddler сам подкачивает необходимый сертификат и запрос отрабатывал.
Я немного перестроил запрос к данному сайту. Стал сначала запускать Fiddler, а потом отправлял запрос.После получения тела выгружаю fiddler из памяти
Такой вот костыль.
я его даже установить на их сервере не могу
(27)
Да. я тоже активизировал протоколы TLS 1.1 и TLS 1.2. Но запрос все-равно не работал. Возможно я тоже брал информацию из этой или подобной статьи.
(27)
Вот даже сейчас. У меня стоит Windows 7 Макс.
Параметры реестра из https://infostart.ru/1c/articles/1024217/ выставлены.
Есть у нас портал НацБанка Казахстана https://nationalbank.kz . Недавно они что-то изменили у себя в безопасности и теперь не получается получить GET-запросом ресурс с курсом валют
"rss/get_rates.cfm?fdate=" + фДата. фДата - дата в формате "ЧЧ.ММ.ГГГГ"
Но если я загружу Fiddler и прописываю прокси, то файл ко мне прилетает.
Я конечно понимаю все, война, хохлы, хакерские атаки на ИС, в том числе и на Честный знак. Тут, все подробно расписано: https://olegon.ru/showthread.php?t=36795
Но, что-то уж очень странно себя ведут сервера честного знака, может я чего-то не понимаю, и можно все-таки как-то это обойти?
Давно(с самого начала, уже года два) рабочая обработка, для работы с API CRPT нужно получить токен.
Отправляю GET запрос, на который должен получить в ответ пару uuid и code, в структуре JSON, для дальнейшего подписания их ЭЦП, отправки подписанного обратно и получения токена для дальнейшей работы.
Но, в ответ получаю: "WinHttp.WinHttpRequest: Ошибка поддержки безопасных каналов"
Ладно, предположим, не работает.
Но, открываю тот-же УРЛ в браузере,
и вижу такой ответ:
Вроде, вся нужная инфа в ответе есть. Это как раз эта "ключевая пара". Но, это браузером. Почему 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\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.
Описание: Произошла ошибка в поддержке безопасного канала.
У меня была точно такая же проблема после перехода с 2003 на 2008 R2 и я нашел решение. Изменить:
и твоя проблема исчезнет.
Решение представляет собой комбинацию ряда опубликованных в stackoverflow решений аналогичных проблем, но это казалось лучшим решением для добавления.
Эта проблема
Попытка протестировать PayPal IPN на Windows Server 2008 с использованием классического ASP и песочницы PayPal возвращает ошибку «Произошла ошибка в поддержке безопасного канала».
Почему это проблема
PayPal требует, чтобы все коммуникации с их системами были максимально безопасными. Вам понадобится соединение TLS 1.2. Windows Server 2008 по умолчанию не является TLS 1.2.
Мое решение
В вашем коде вам нужно использовать , а не , как упоминалось выше.
Найти решение было кошмаром, поэтому я добавлю несколько фраз ниже, чтобы помочь другим при поиске:
PayPal IPN не работает с ошибкой сервера
Ошибки PayPal SSL Windows 2008
Произошла ошибка в поддержке безопасного канала
классические ошибки SSL в песочнице ASP PayPal
Я хотел бы публично поблагодарить Rackspace и GoDaddy за их помощь в этом. Я хотел бы публично заявить, что я обнаружил, что у PayPal самая плохая техническая поддержка когда-либо, и мне все равно, постоянно указывая на свои собственные документы, если они когда-либо ответят. Они говорят, что рассылают электронные письма об этом с сентября 2014 года, но я так и не получил ни одного. Эти новые требования действуют в песочнице PayPal, но вступят в силу в сентябре 2016 года. Я столкнулся с этим только как с разработкой нового решения, поэтому вам нужна песочница - если вы работаете вживую, вы не узнаете о проблеме, пока она не возникнет, а затем ты мертв в воде. Мой совет - протестируйте всю свою платежную систему в песочнице PayPal как можно скорее !!
Это обновление обеспечивает поддержку Transport Layer Security (TLS) 1.1 и TLS 1.2 в Windows Server 2012, Windows 7 с пакетом обновления 1 (SP1) и Windows Server 2008 R2 SP1.
Это обновление не изменит поведение приложений, которые вручную устанавливают протоколы безопасности вместо того, чтобы передавать флаг по умолчанию.
на сервере , исходящий на сервер через TLS, ответил на рассматриваемую ошибку. Я подумал, что это может быть совместимость с набором шифров. трассировка указанная версия в запросе была TLS 1.0, но серверу требуется TLS 1.2. Наборы шифров, отправленные на исходящий сервер из клиентской службы, были в порядке. Проблема в том, что клиентская служба или приложение на сервере Windows по умолчанию использует системное значение по умолчанию, а не TLS 1.2.
Решение состоит в том, чтобы добавить подраздел реестра с именем со значением, соответствующим тому, какие версии TLS должны поддерживаться. Добавьте указанный подраздел реестра с типом в следующие места:
Для исправления Internet Explorer вы можете добавить аналогичный подраздел реестра под названием , также с типом , в следующие места:
- HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Настройки Интернета
- HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Internet Settings
Ниже вы можете найти таблицу значений для обоих подключей:
Возьмите значение TLS 1.1 (0x00000200) и значение TLS 1.2 (0x00000800), затем сложите их вместе в калькуляторе (в режиме программиста), получившееся значение реестра будет 0x00000A00.
Я обратился 0x00000A00 как значение для обоих подключей, и проблема успешно решена.
Все это верно, однако «критический» недостающий бит для поддержки TLS1.2 в Windows 7 с IIS7.5 и классическим asp устанавливает это в реестре: -
Надеюсь, это избавит вас от лишних хлопот, перезагрузок и головокружения! :)
Коды ошибок устранения неполадок:
Указывает, что произошла ошибка, связанная с безопасным каналом (эквивалентно кодам ошибок, начинающимся с «SEC_E_» и «SEC_I_», перечисленным в заголовочном файле «winerror.h»).
Одно из решений - сбалансировать нагрузку входящего запроса более чем на один пул приложений или на несколько серверов.
Я сам столкнулся с этой ошибкой несколько месяцев назад. Чаще всего эта проблема вызвана неверным сертификатом SSL. Учитывая, что на момент публикации вы только что перешли на новый сервер, вам, вероятно, просто нужно переустановить сертификат SSL.
Я понимаю, что это старый вопрос, но надеюсь, что кто-то еще сможет извлечь пользу из моего ответа.
Читайте также: