Многие разработчики, поддерживающие системы на базе Windows XP и платформы 1С:Предприятие 8.2, столкнулись с серьезной проблемой: механизмы загрузки данных с веб-сайтов, которые годами работали стабильно, внезапно перестали функционировать. Основная причина — массовый переход веб-серверов на протокол шифрования TLS 1.2 и отказ от устаревших протоколов TLS 1.0 и 1.1. В данной статье мы подробно разберем, почему стандартные методы 1С перестают работать, и предложим несколько проверенных способов решения этой задачи.
Проанализируем ситуацию с технической стороны. В 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. Система просто не понимает, какой параметр ей пытаются передать. Рассмотрим подробнее, как обойти эти ограничения.
Проанализируем самый надежный и универсальный метод — использование утилиты Stunnel. Этот способ позволяет не вносить существенных изменений в код 1С и не зависеть от ограничений операционной системы. Stunnel работает как локальный прокси-сервер, который принимает обычный HTTP-трафик от 1С и преобразует его в защищенный HTTPS-трафик с поддержкой TLS 1.2/1.3.
Разберем по шагам процесс настройки:
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С работает в максимально простом режиме.
Если использование прокси-сервера неудобно, можно воспользоваться консольной утилитой curl. Однако при попытке запустить современный curl.exe на Windows XP, вы часто столкнетесь с ошибкой: "отсутствует файл normaliz.dll". Выясним причину: этот файл отвечает за нормализацию Unicode-строк и появился в штатной поставке только начиная с Windows Vista.
Чтобы заставить curl работать на XP, выполним следующие действия:
normaliz.dll в систему.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") Тогда
// Обрабатываем полученный файл
КонецЕсли;
Для опытных системных администраторов существует путь активации TLS 1.2 непосредственно в операционной системе. Windows XP Embedded POSReady 2009 — это версия системы на базе ядра XP, которая получала обновления безопасности до 2019 года, включая патчи для TLS 1.2.
Рассмотрим алгоритм действий:
.reg файл:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\WPA\PosReady]
"Installed"=dword:00000001
Путь в реестре для активации:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
В этом разделе необходимо создать параметр DisabledByDefault со значением 0 и Enabled со значением 1. После перезагрузки системные компоненты, такие как HTTPСоединение в 1С, могут начать поддерживать современные протоколы.
Если вы решите переходить на встроенный объект 1С HTTPСоединение, помните, что на старых платформах (8.2) он также опирается на системные библиотеки. Однако иногда проблема заключается не в самом протоколе, а в цепочке сертификатов.
Посмотрим на ситуацию: если сервер использует новый сертификат (например, Let's Encrypt), то в Windows XP просто нет корневых сертификатов этого центра. В этом случае нужно вручную обновить файл сертификатов 1С.
Порядок действий:
cacert.pem в папке установки платформы 1С.cacert.pem блокнотом и добавим содержимое нового сертификата в конец файла.Важное примечание: для платформы 8.2 на Windows XP этот метод поможет только в том случае, если системные патчи TLS 1.2 (из Решения №3) уже установлены, иначе обновление сертификатов не поможет преодолеть ограничение протокола.
Проанализировав все доступные варианты, мы рекомендуем следующий алгоритм выбора решения:
Помните, что использование Windows XP в современных сетях сопряжено с рисками безопасности, и данные меры являются временным решением для поддержки устаревшего оборудования или специфического ПО.