Современные требования к безопасности веб-ресурсов диктуют жесткие правила: практически все интернет-магазины сегодня работают исключительно по защищенному протоколу HTTPS (SSL). Однако владельцы старых, сильно доработанных и снятых с поддержки конфигураций 1С:Управление торговлей 10.3 часто сталкиваются с непреодолимым препятствием при попытке настроить обмен данными. Старые механизмы платформы и встроенные модули интеграции «из коробки» не умеют корректно работать с защищенными соединениями.
Обновление всей конфигурации до актуального релиза или накат нового модуля интеграции от «1С-Битрикс» часто оказываются невозможными из-за огромного объема кастомного кода и высокой стоимости таких работ. В этой статье мы подробно разберем, как решить проблему обмена по протоколу HTTPS без глобального обновления системы.
---
Прежде чем приступать к программированию или установке стороннего софта, проверим самый простой и быстрый способ. В некоторых случаях современная версия платформы 1С:Предприятие 8.3 (на которой запускается ваша старая база УТ 10.3) способна самостоятельно обработать SSL-соединение.
Выполним следующие шаги для проверки:
1С.http:// вручную пропишем https://. Например: https://ваш_сайт.ru/bitrix/admin/1c_exchange.php.443 вместо 80 в параметрах соединения (если порт вынесен в отдельное поле).Если ваша платформа 1С достаточно свежая (например, старше релиза 8.3.10), а SSL-сертификат сайта выдан доверенным центром сертификации, обмен может заработать сразу без каких-либо доработок. Однако, если система выдает ошибку соединения или «Удаленный узел не прошел проверку», переходим к следующим, более надежным методам.
---
Если первый метод не принес результатов, нам потребуется внести минимальные изменения в код, отвечающий за создание интернет-соединения. Поскольку обмен в вашей конфигурации идет через доработанный план обмена, мы найдем место, где инициализируется объект HTTPСоединение.
Обычно этот код располагается в общем модуле, связанном с интеграцией Битрикс (например, Б_ОбменССайтомСервер, Б_ОбщиеПроцедурыИФункцииОбменаССайтом), либо непосредственно в модуле самого плана обмена.
Выясним причину ошибки: в старом коде УТ 10.3 соединение создается без указания параметров безопасности:
Соединение = Новый HTTPСоединение(Сервер, Порт, Пользователь, Пароль, Прокси);
Чтобы заставить платформу использовать шифрование SSL, нам необходимо передать в конструктор специальный объект защищенного соединения. Модифицируем этот участок кода следующим образом:
// 1. Создаем объект защищенного соединения с использованием системных сертификатов Windows
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(),
Новый СертификатыУдостоверяющихЦентровWindows()
);
// 2. Передаем этот объект седьмым параметром в конструктор HTTPСоединения, принудительно указав порт 443
Соединение = Новый HTTPСоединение(
Сервер,
443, // Порт для HTTPS
ИмяПользователя,
Пароль,
Прокси,
Таймаут,
ЗащищенноеСоединение
);
После внесения этих изменений платформа будет использовать встроенную библиотеку OpenSSL для шифрования трафика при обмене с сайтом.
---
Рассмотрим ситуацию, когда конфигурация базы 1С полностью закрыта для изменений, находится на строгой поддержке, или в штате просто нет программиста. В этом случае идеальным выходом будет использование бесплатной утилиты-посредника stunnel.
Эта программа берет на себя всю работу по шифрованию данных. Она принимает обычный HTTP-трафик от вашей 1С на локальном компьютере, шифрует его в SSL и отправляет на сервер вашего сайта.
Проанализируем пошагово процесс настройки этой схемы:
1С.stunnel.conf (его можно найти в папке установленной программы).
[bitrix-exchange]
client = yes
accept = 127.0.0.1:8080
connect = ваш_домен_сайта.ru:443
8080.1С:Управление торговлей заменим адрес сайта на локальный:
http://127.0.0.1:8080/bitrix/admin/1c_exchange.php.Как это работает на практике: Наша старая 1С отправляет незашифрованные данные на локальный адрес 127.0.0.1:8080 по стандартному протоколу HTTP. Программа stunnel мгновенно перехватывает этот трафик, "одевает" его в защищенную SSL-оболочку и перенаправляет на реальный сервер вашего сайта по защищенному порту 443. Для сайта это выглядит как стандартное безопасное соединение, а для 1С — как простой локальный обмен.
---
При использовании Метода 1 или Метода 2 программисты часто сталкиваются со следующей системной ошибкой платформы: Ошибка работы с Интернет: Удаленный узел не прошел проверку. Это происходит потому, что платформа 1С (особенно старых релизов) не доверяет центру сертификации, который выдал SSL-сертификат вашему сайту (например, очень популярному бесплатному сертификату Let's Encrypt).
Разберем два эффективных способа устранения этой проблемы:
В каталоге установки вашей платформы (например, C:\Program Files\1cv8\8.3.10.2650\bin\) хранится специальный файл-хранилище доверенных сертификатов cacert.pem. Если этот файл устарел, 1С не сможет подтвердить подлинность современного сертификата вашего сайта.
cacert.pem в папке bin вашей версии платформы.cacert.pem на новый (предварительно сделав резервную копию старого файла).1С (если обмен выполняется в клиент-серверном варианте на стороне сервера) или перезапустим клиентское приложение (если обмен идет в файловом режиме).В отличие от веб-браузеров, которые умеют самостоятельно «достраивать» недостающие звенья цепочки сертификатов безопасности, платформа 1С крайне чувствительна к правильности настройки SSL на самом сервере сайта. Если на стороне веб-сервера (Nginx или Apache) прописан только основной сертификат домена без промежуточных сертификатов цепочки, 1С всегда будет выдавать ошибку проверки.
Проанализируем конфигурацию вашего веб-сервера:
ssl_certificate указан путь к файлу полной цепочки сертификатов (обычно это файл fullchain.pem или bundle.crt), а не к одиночному файлу сертификата домена.Применяя данные подходы, мы сможем гарантировать стабильный, защищенный и бесперебойный обмен данными между устаревшей учетной системой 1С:Управление торговлей 10.3 и современным сайтом под управлением «1С-Битрикс».