Почему HTTPСоединение не использует прокси на сервере и как это исправить?

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

Часто разработчики 1С сталкиваются с ситуацией, когда код, использующий HTTPСоединение через прокси-сервер, идеально работает на локальном компьютере (на клиенте), но выдает ошибку «Не могу установить соединение» при выполнении на сервере. При этом возникают подозрения, что объект ИнтернетПрокси попросту игнорируется платформой. В этой статье мы подробно разберем, как именно 1С взаимодействует с прокси-серверами, почему настройки могут не подхватываться и как гарантированно настроить соединение в серверном контексте.

Различие протоколов HTTP и HTTPS в настройках прокси

Одной из самых распространенных ошибок является несоответствие протокола в настройках прокси и в самом соединении. Рассмотрим ситуацию: если вы создаете HTTPСоединение для защищенного ресурса (порт 443, SSL), то и в объекте ИнтернетПрокси настройки должны быть заданы именно для протокола "https".

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


Прокси = Новый ИнтернетПрокси;
Прокси.Установить("http", "1.1.1.1", 8080, "Login", "Password");
Соединение = Новый HTTPСоединение("example.com", 443, , , Прокси, , Новый ЗащищенноеСоединениеOpenSSL);

В данном случае мы установили параметры только для "http", но обращаемся к защищенному ресурсу. Платформа может проигнорировать эти настройки, так как для "https" параметры не определены. Чтобы исправить это, воспользуемся более универсальным подходом или явно укажем протокол "https".

Разберем правильный пример настройки:


Прокси = Новый ИнтернетПрокси;
// Указываем настройки именно для https
Прокси.Установить("https", "1.1.1.1", 8080, "Login", "Password");
// Или используем метод без указания протокола, если хотим применить ко всем
// Прокси.Сервер = "1.1.1.1";
// Прокси.Порт = 8080;

Соединение = Новый HTTPСоединение("example.com", , , , Прокси, , Новый ЗащищенноеСоединениеOpenSSL);

Проблема контекста исполнения: Клиент против Сервера

Когда мы запускаем код на клиенте, 1С работает в контексте текущего пользователя Windows. В этом случае система может автоматически подтягивать настройки прокси из настроек Internet Explorer (системные настройки прокси). Именно поэтому даже с неправильным логином в коде соединение может проходить — система просто использует свои закэшированные данные или настройки "по умолчанию".

На сервере ситуация иная. Служба 1С (обычно rphost) работает под специальной учетной записью (например, USR1CV8). У этой учетной записи:

  1. Нет графического интерфейса и настроенного профиля в Internet Explorer.
  2. Нет доступа к вашим личным сертификатам и сохраненным паролям прокси.
  3. Системные переменные окружения могут отличаться от пользовательских.

Чтобы выяснить причину отказа на сервере, нам нужно убедиться, что учетная запись сервера 1С «видит» прокси-сервер. Для этого в Windows можно воспользоваться утилитой netsh. Выполните в командной строке от имени администратора:

netsh winhttp show proxy

Если вы видите сообщение «Прямой доступ (без прокси-сервера)», это означает, что на системном уровне (который использует сервер 1С) прокси не задан, даже если в вашем браузере он работает. Вы можете импортировать настройки из браузера командой:

netsh winhttp import proxy source=ie

Использование конфигурационного файла inetcfg.xml

Если программная установка ИнтернетПрокси по каким-то причинам не помогает, мы можем принудительно задать настройки прокси для всего сервера 1С через файл конфигурации inetcfg.xml. Это особенно полезно, когда нужно настроить доступ для всех баз на сервере сразу.

Рассмотрим порядок действий:

  1. Перейдем в каталог конфигурационных файлов сервера (обычно это C:\Program Files\1cv8\conf).
  2. Создадим (или отредактируем) файл inetcfg.xml.
  3. Добавим в него структуру с параметрами прокси.

Пример содержания файла inetcfg.xml:


<config xmlns="http://v8.1c.ru/8.2/config">
    <proxy host="1.1.1.1" port="8080" user="Login" password="Password" />
</config>

Важно: После изменения этого файла может потребоваться перезапуск службы сервера 1С, чтобы настройки вступили в силу.

Особенности работы с ЗащищенноеСоединениеOpenSSL

При работе через прокси-сервер с использованием HTTPS часто возникает проблема с проверкой SSL-сертификатов. Если ваш прокси-сервер выполняет инспекцию трафика (подменяет сертификаты для проверки содержимого), 1С разорвет соединение с ошибкой «Не могу установить соединение» из-за недоверенного сертификата.

Проанализируем шаги для решения этой проблемы:

  1. Проверьте, требует ли прокси-сервер специфический корневой сертификат.
  2. Если да, то этот сертификат необходимо добавить в файл cacert.pem, который находится в папке bin установленной платформы 1С.
  3. При создании объекта ЗащищенноеСоединениеOpenSSL убедитесь, что вы правильно передаете параметры проверки сертификатов.

Параметр использования системных настроек в коде

Посмотрим на конструктор объекта ИнтернетПрокси. В нем есть важный параметр, который определяет, будет ли объект брать настройки из системы или использовать только те, что заданы в коде.


// Ложь означает, что мы НЕ хотим использовать системные настройки прокси
Прокси = Новый ИнтернетПрокси(Ложь); 
Прокси.Установить("https", "1.1.1.1", 8080, "Login", "Password");

Если передать Истина или оставить поле пустым, 1С попытается сначала получить настройки из ОС. На сервере это часто приводит к путанице, поэтому для серверного кода рекомендуется явно инициализировать объект с параметром Ложь и жестко прописывать параметры, полученные, например, из констант или настроек программы.

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

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

Соблюдение этих правил позволит вам избежать большинства проблем при организации обмена данными через прокси-сервер в среде 1С:Предприятие.

← На главную