Часто разработчики 1С сталкиваются с ситуацией, когда код, использующий HTTPСоединение через прокси-сервер, идеально работает на локальном компьютере (на клиенте), но выдает ошибку «Не могу установить соединение» при выполнении на сервере. При этом возникают подозрения, что объект ИнтернетПрокси попросту игнорируется платформой. В этой статье мы подробно разберем, как именно 1С взаимодействует с прокси-серверами, почему настройки могут не подхватываться и как гарантированно настроить соединение в серверном контексте.
Одной из самых распространенных ошибок является несоответствие протокола в настройках прокси и в самом соединении. Рассмотрим ситуацию: если вы создаете 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С «видит» прокси-сервер. Для этого в Windows можно воспользоваться утилитой netsh. Выполните в командной строке от имени администратора:
netsh winhttp show proxy
Если вы видите сообщение «Прямой доступ (без прокси-сервера)», это означает, что на системном уровне (который использует сервер 1С) прокси не задан, даже если в вашем браузере он работает. Вы можете импортировать настройки из браузера командой:
netsh winhttp import proxy source=ie
Если программная установка ИнтернетПрокси по каким-то причинам не помогает, мы можем принудительно задать настройки прокси для всего сервера 1С через файл конфигурации inetcfg.xml. Это особенно полезно, когда нужно настроить доступ для всех баз на сервере сразу.
Рассмотрим порядок действий:
C:\Program Files\1cv8\conf).inetcfg.xml.Пример содержания файла 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С, чтобы настройки вступили в силу.
При работе через прокси-сервер с использованием HTTPS часто возникает проблема с проверкой SSL-сертификатов. Если ваш прокси-сервер выполняет инспекцию трафика (подменяет сертификаты для проверки содержимого), 1С разорвет соединение с ошибкой «Не могу установить соединение» из-за недоверенного сертификата.
Проанализируем шаги для решения этой проблемы:
cacert.pem, который находится в папке bin установленной платформы 1С.ЗащищенноеСоединениеOpenSSL убедитесь, что вы правильно передаете параметры проверки сертификатов.Посмотрим на конструктор объекта ИнтернетПрокси. В нем есть важный параметр, который определяет, будет ли объект брать настройки из системы или использовать только те, что заданы в коде.
// Ложь означает, что мы НЕ хотим использовать системные настройки прокси
Прокси = Новый ИнтернетПрокси(Ложь);
Прокси.Установить("https", "1.1.1.1", 8080, "Login", "Password");
Если передать Истина или оставить поле пустым, 1С попытается сначала получить настройки из ОС. На сервере это часто приводит к путанице, поэтому для серверного кода рекомендуется явно инициализировать объект с параметром Ложь и жестко прописывать параметры, полученные, например, из констант или настроек программы.
Подводя итог, если у вас не работает прокси на сервере 1С, выполните следующие действия:
ИнтернетПрокси используется метод Установить("https", ...).Новый ИнтернетПрокси(Ложь), чтобы исключить влияние неочевидных системных настроек.netsh winhttp для проверки системного прокси в Windows.cacert.pem.Соблюдение этих правил позволит вам избежать большинства проблем при организации обмена данными через прокси-сервер в среде 1С:Предприятие.