Как восстановить работу WinHttp.WinHttpRequest в Windows XP при переходе сайта на TLS 1.2

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

Многие разработчики, поддерживающие системы на базе Windows XP и платформы 1С:Предприятие 8.2, столкнулись с серьезной проблемой: механизмы загрузки данных с веб-сайтов, которые годами работали стабильно, внезапно перестали функционировать. Основная причина — массовый переход веб-серверов на протокол шифрования TLS 1.2 и отказ от устаревших протоколов TLS 1.0 и 1.1. В данной статье мы подробно разберем, почему стандартные методы 1С перестают работать, и предложим несколько проверенных способов решения этой задачи.

Выясняем причину: почему WinHttp перестает работать?

Проанализируем ситуацию с технической стороны. В Windows XP за работу с защищенными соединениями отвечает системная библиотека SChannel (Secure Channel). В стандартной версии Windows XP (Professional или Home) эта библиотека физически не поддерживает протоколы шифрования выше TLS 1.0. Когда сервер требует TLS 1.2, а клиент (Windows XP) предлагает только TLS 1.0, соединение разрывается на этапе рукопожатия (Handshake).

Часто программисты пытаются принудительно установить протокол в коде 1С, используя объект WinHttp.WinHttpRequest.5.1:


WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(9, 2048); // Пытаемся включить TLS 1.2

Однако в Windows XP такая попытка приводит к ошибке синтаксиса. Это происходит потому, что константа со значением 2048 (соответствующая TLS 1.2) не определена в системных библиотеках XP. Система просто не понимает, какой параметр ей пытаются передать. Рассмотрим подробнее, как обойти эти ограничения.

Решение №1: Использование Stunnel как прокси-шлюза

Проанализируем самый надежный и универсальный метод — использование утилиты Stunnel. Этот способ позволяет не вносить существенных изменений в код 1С и не зависеть от ограничений операционной системы. Stunnel работает как локальный прокси-сервер, который принимает обычный HTTP-трафик от 1С и преобразует его в защищенный HTTPS-трафик с поддержкой TLS 1.2/1.3.

Разберем по шагам процесс настройки:

  1. Скачаем и установим Stunnel для Windows (версия для XP должна поддерживать библиотеку OpenSSL).
  2. Настроим файл конфигурации stunnel.conf. Нам нужно создать секцию для перенаправления запросов на конкретный сайт.

Пример настройки секции в stunnel.conf:


[my-site-https]
client = yes
accept = 127.0.0.1:8080
connect = site.ru:443
checkHost = site.ru
verifyChain = yes
CAfile = ca-certs.pem

После запуска службы Stunnel, она начнет "слушать" локальный порт 8080. Теперь нам нужно изменить код в 1С. Вместо прямого обращения к серверу через HTTPS, мы будем обращаться к локальному хосту через обычный HTTP.

Рассмотрим пример кода в 1С до и после изменений:

Было:


WinHttp.Open("GET", "https://site.ru/data.xml", Ложь);
WinHttp.Send();

Стало (через Stunnel):


// Обращаемся к локальному прокси, Stunnel сам добавит TLS 1.2 и перешлет запрос
WinHttp.Open("GET", "http://127.0.0.1:8080/data.xml", Ложь);
WinHttp.SetRequestHeader("Host", "site.ru"); // Важно передать правильный заголовок Host
WinHttp.Send();

Этот метод хорош тем, что всю сложность шифрования берет на себя внешняя современная библиотека, а 1С работает в максимально простом режиме.

Решение №2: Использование curl с исправлениями для Windows XP

Если использование прокси-сервера неудобно, можно воспользоваться консольной утилитой curl. Однако при попытке запустить современный curl.exe на Windows XP, вы часто столкнетесь с ошибкой: "отсутствует файл normaliz.dll". Выясним причину: этот файл отвечает за нормализацию Unicode-строк и появился в штатной поставке только начиная с Windows Vista.

Чтобы заставить curl работать на XP, выполним следующие действия:

  1. Установим официальное обновление от Microsoft KB919477 (Microsoft Unicode Normalization Forms Update). Это добавит normaliz.dll в систему.
  2. Найдем специальную "legacy" сборку curl, скомпилированную под XP. Важно, чтобы она была собрана с использованием OpenSSL, а не системного WinSSL/SChannel, иначе проблема с TLS 1.2 сохранится.

Пример вызова загрузки файла через curl из 1С:


ПутьККуртл = "C:\Tools\curl.exe";
Команда = ПутьККуртл + " -k -L --tls-max 1.2 ""https://site.ru/getfile"" -o ""C:\temp\result.txt""";
КомандаСистемы(Команда);

Если ФайлСуществует("C:\temp\result.txt") Тогда
    // Обрабатываем полученный файл
КонецЕсли;

Решение №3: Режим POSReady 2009 и системные патчи

Для опытных системных администраторов существует путь активации TLS 1.2 непосредственно в операционной системе. Windows XP Embedded POSReady 2009 — это версия системы на базе ядра XP, которая получала обновления безопасности до 2019 года, включая патчи для TLS 1.2.

Рассмотрим алгоритм действий:

  1. Применим "хак реестра", чтобы система начала считать себя версией POSReady. Для этого создадим .reg файл:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\WPA\PosReady]
"Installed"=dword:00000001
  1. Установим накопительное обновление KB3140245 или аналогичные, содержащие поддержку TLS 1.1/1.2.
  2. После установки обновлений необходимо вручную активировать протоколы в реестре, так как по умолчанию они могут быть выключены.

Путь в реестре для активации:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client

В этом разделе необходимо создать параметр DisabledByDefault со значением 0 и Enabled со значением 1. После перезагрузки системные компоненты, такие как HTTPСоединение в 1С, могут начать поддерживать современные протоколы.

Решение №4: Настройка HTTPСоединение и cacert.pem

Если вы решите переходить на встроенный объект 1С HTTPСоединение, помните, что на старых платформах (8.2) он также опирается на системные библиотеки. Однако иногда проблема заключается не в самом протоколе, а в цепочке сертификатов.

Посмотрим на ситуацию: если сервер использует новый сертификат (например, Let's Encrypt), то в Windows XP просто нет корневых сертификатов этого центра. В этом случае нужно вручную обновить файл сертификатов 1С.

Порядок действий:

  1. Найдем файл cacert.pem в папке установки платформы 1С.
  2. Скачаем актуальный набор сертификатов с сайта curl.se или экспортируем нужный сертификат из современного браузера.
  3. Откроем cacert.pem блокнотом и добавим содержимое нового сертификата в конец файла.

Важное примечание: для платформы 8.2 на Windows XP этот метод поможет только в том случае, если системные патчи TLS 1.2 (из Решения №3) уже установлены, иначе обновление сертификатов не поможет преодолеть ограничение протокола.

Резюме и рекомендации

Проанализировав все доступные варианты, мы рекомендуем следующий алгоритм выбора решения:

Помните, что использование Windows XP в современных сетях сопряжено с рисками безопасности, и данные меры являются временным решением для поддержки устаревшего оборудования или специфического ПО.

← На главную