Как настроить подключение к веб-сервисам 1С:Документооборота по HTTPS и исправить ошибки проверки SSL и аутентификации?

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

Перевод интеграционных решений на протокол шифрования HTTPS — это стандартное требование современной корпоративной безопасности. Однако для разработчика 1С этот шаг часто оборачивается каскадом труднообъяснимых ошибок. Типичный сценарий: настроенный и стабильно работающий по HTTP обмен с веб-сервисами «1С:Документооборота» (ДО) после перевода веб-сервера на HTTPS полностью прекращает функционировать. При попытке переписать код «в лоб» система выдает ошибку «Удаленный узел не прошел проверку», а после попыток обойти её — «Аутентификация пользователя не выполнена».

В этой статье мы подробно разберем природу обеих ошибок, выясним, почему стандартные действия в коде не приносят результата, и разработаем пошаговый план решения проблемы как на стороне платформы 1С, так и на стороне веб-сервера IIS.

Выясняем причину первой ошибки: «Удаленный узел не прошел проверку»

Данная ошибка означает, что платформа 1С при попытке установить защищенное соединение SSL/TLS не смогла проверить подлинность SSL-сертификата, который ей предоставил веб-сервер IIS. Простыми словами, 1С не доверяет этому сертификату.

Почему это происходит, даже если на локальном компьютере разработчика всё открывается через браузер без предупреждений? Разберем ключевые причины:

  1. Клиент-серверный контекст выполнения кода. Если ваша база данных 1С является клиент-серверной, то любой вызов конструктора Новый WSОпределения() или Новый WSПрокси() в серверном модуле выполняется на стороне сервера приложений 1С (процесс rphost). Следовательно, проверку SSL-сертификата выполняет операционная система сервера 1С, а не ваш локальный компьютер. Все манипуляции по установке сертификатов на локальном ПК разработчика в этом случае абсолютно бесполезны.
  2. Использование самоподписанных сертификатов (Self-Signed) или внутренних CA. В корпоративных сетях сисадмины часто используют сертификаты, выпущенные внутренним удостоверяющим центром (CA) домена, а не доверенными глобальными центрами (такими как Let's Encrypt, DigiCert и т.д.). Сервер приложений 1С по умолчанию не знает о существовании вашего локального центра сертификации и считает его небезопасным.
  3. Особенности работы платформы 1С с защищенными соединениями. Для проверки цепочек сертификатов платформа 1С использует встроенную библиотеку OpenSSL, которая сверяется со своим собственным файлом доверенных корневых сертификатов cacert.pem, расположенным в каталоге установки платформы, либо обращается к системному хранилищу ОС Windows (в зависимости от параметров инициализации объекта ЗащищенноеСоединениеOpenSSL).

Пошаговое решение проблемы с проверкой SSL-сертификата

Рассмотрим детально три основных способа устранения ошибки проверки сертификата на сервере приложений 1С.

Способ 1. Добавление корневого сертификата в cacert.pem на сервере 1С

Это самый надежный кроссплатформенный метод, который гарантирует корректную работу 1С как под Windows, так и под Linux.

  1. Запросите у системного администратора корневой сертификат удостоверяющего центра (обычно файл с расширением .crt, .cer или .pem). Если администратор предоставил файлы сертификатов в разных форматах, выберите корневой (в его названии часто присутствует слово «root» или «ca»).
  2. Откройте полученный файл сертификата в любом текстовом редакторе (например, Блокноте). Если вы видите текстовое содержимое, начинающееся с тегов -----BEGIN CERTIFICATE----- и заканчивающееся -----END CERTIFICATE-----, то сертификат уже находится в нужном формате PEM. Если внутри двоичный код (нечитаемые символы), его необходимо экспортировать в кодировке Base-64 (PEM) через оснастку сертификатов Windows.
  3. Подключитесь к серверу, на котором запущен сервер приложений 1С.
  4. Перейдите в каталог установленной платформы, в папку bin. Например: C:\Program Files\1cv8\8.3.22.1709\bin\.
  5. Найдите файл cacert.pem и откройте его текстовым редактором от имени Администратора.
  6. Перейдите в самый конец файла, добавьте новую строку и скопируйте туда всё содержимое вашего корневого сертификата (включая строки BEGIN и END).
  7. Сохраните файл cacert.pem.
  8. Внимание, критически важный шаг! Перезапустите службу «Агент сервера 1С:Предприятия» (1C:Enterprise 8.3 Server Agent). Процесс rphost считывает файл cacert.pem только в момент своего запуска. Без перезапуска службы изменения не вступят в силу.

Способ 2. Установка сертификата в системное хранилище Windows Server

Если сервер 1С работает под управлением ОС Windows, мы можем импортировать сертификат в операционную систему. Однако здесь есть важный нюанс: служба сервера 1С работает под определенной учетной записью (обычно это USR1CV8 или локальная система SYSTEM).

  1. На сервере приложений 1С откройте меню «Выполнить» (Win + R), введите mmc и нажмите Enter.
  2. В открывшейся консоли выберите «Файл» — «Добавить или удалить оснастку». Выберите «Сертификаты» и нажмите «Добавить».
  3. Обязательно выберите пункт «Учетная запись компьютера» (а не пользователя), затем «Локальный компьютер». Нажмите «Готово» и «ОК».
  4. В дереве консоли перейдите в ветку «Доверенные корневые центры сертификации» (Trusted Root Certification Authorities) — «Сертификаты».
  5. Нажмите правой кнопкой мыши по разделу «Сертификаты», выберите «Все задачи» — «Импорт». Укажите путь к корневому сертификату, полученному от сисадмина, и завершите импорт.

После этого в коде 1С необходимо инициализировать защищенное соединение с явным указанием использовать системное хранилище Windows:


ДоSsl = Новый ЗащищенноеСоединениеOpenSSL(
    Новый СертификатКлиентаWindows(), 
    Новый СертификатыУдостоверяющихЦентровWindows()
);

Способ 3. Отключение проверки сертификатов (только для тестирования!)

Если вам нужно срочно проверить работоспособность интеграции и исключить влияние SSL на текущую ошибку, вы можете временно отключить валидацию сертификатов в коде 1С. Для этого передайте значения Неопределено в параметры конструктора защищенного соединения:


// Создаем объект SSL без проверки цепочек сертификатов и хоста
ДоSsl = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);

Используйте этот метод только для локальной отладки. В продуктивной среде отключать проверку SSL крайне не рекомендуется из-за угроз безопасности (атак типа Man-in-the-Middle).

Выясняем причину второй ошибки: «Аутентификация пользователя не выполнена»

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

При этом под теми же учетными данными по старому протоколу HTTP или через веб-браузер по HTTPS авторизация проходит успешно. Проанализируем, почему возникает этот конфликт.

Дело в том, что при публикации баз данных на веб-сервере IIS платформа 1С использует механизм авторизации самой СУБД/базы 1С. Имя пользователя и пароль передаются в заголовке HTTP-запроса (стандартная Basic-авторизация). Чтобы этот заголовок беспрепятственно обрабатывался расширением 1С (файлом wsisapi.dll), веб-сервер IIS должен пропускать запросы без собственной предварительной проверки.

Когда системные администраторы переводят сайт на HTTPS, они часто «из соображений безопасности» меняют настройки аутентификации в IIS. Если администратор отключает анонимный доступ для виртуального каталога 1С и активирует «Проверку подлинности Windows» (Windows Authentication) или «Обычную проверку подлинности» (Basic Authentication) на уровне самого IIS, происходит следующее:

  1. Платформа 1С отправляет SOAP-запрос к веб-сервису, прикрепляя логин и пароль пользователя 1С.
  2. Веб-сервер IIS перехватывает этот запрос до того, как он попадает в 1С.
  3. IIS пытается авторизовать указанные учетные данные (логин и пароль пользователя 1С) в операционной системе Windows Server или в домене Active Directory.
  4. Поскольку пользователя с таким логином/паролем в домене Windows не существует (это ведь внутренний пользователь базы 1С), IIS отклоняет запрос и возвращает ошибку 401 Unauthorized.
  5. Платформа 1С интерпретирует ответ веб-сервера как ошибку «Аутентификация пользователя не выполнена».

Инструкция для системного администратора по настройке IIS

Чтобы решить проблему с авторизацией, вам необходимо попросить системного администратора проверить и настроить параметры публикации базы 1С:Документооборота в диспетчере служб IIS. Сформулируйте для него следующие задачи:

  1. Настройка способов проверки подлинности:
    • Открыть Диспетчер служб IIS на сервере веб-публикации.
    • В дереве подключений выбрать виртуальный каталог опубликованной базы 1С:Документооборота.
    • Перейти в раздел «Проверка подлинности» (Authentication).
    • Убедиться, что параметр «Анонимная проверка подлинности» (Anonymous Authentication) находится в состоянии «Включено» (Enabled).
    • Все остальные методы проверки подлинности (включая «Обычная проверка подлинности», «Проверка подлинности Windows», «Дайджест-проверка подлинности») для данного виртуального каталога должны быть Отключены (Disabled).
  2. Настройка параметров SSL:
    • Выбрать тот же виртуальный каталог базы 1С в IIS.
    • Перейти в раздел «Параметры SSL» (SSL Settings).
    • Убедиться, что в блоке «Клиентские сертификаты» (Client certificates) переключатель установлен в положение «Игнорировать» (Ignore). Если там установлено «Требовать» (Require), IIS будет заблокирован для любых запросов без явного предоставления клиентского SSL-сертификата.

Дополнительно проверьте структуру файла публикации default.vrd в каталоге публикации на веб-сервере. Убедитесь, что в нем разрешена аутентификация и корректно прописаны точки подключения к веб-сервисам:


<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        base="/ДО_База"
        ib="File="C:\Base\DO";">
    <ws>
        <point name="dm" alias="dm.1cws" enable="true"/>
    </ws>
</point>

Пример отказоустойчивого кода для подключения по HTTPS

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


// Инициализируем параметры подключения
СерверДО = "do.company.local"; // Адрес публикации базы ДО
ИмяПубликации = "do_prod";
ЛогинДО = "WebIntegrationUser";
ПарольДО = "SuperSecurePassword123";

// Шаг 1. Создаем объект защищенного соединения SSL
// Используем системное хранилище сертификатов Windows
ДоSsl = Новый ЗащищенноеСоединениеOpenSSL(
    Новый СертификатКлиентаWindows(), 
    Новый СертификатыУдостоверяющихЦентровWindows()
);

// Шаг 2. Формируем путь к описанию WSDL веб-сервиса ДО
ПутьWsdl = "https://" + СерверДО + "/" + ИмяПубликации + "/ws/dm.1cws?wsdl";

Попытка
    // Шаг 3. Создаем определения веб-сервиса (WSDL)
    // Указываем таймаут подключения (например, 20 секунд)
    ДоОпределения = Новый WSОпределения(
        ПутьWsdl, 
        ЛогинДО, 
        ПарольДО, 
        , 
        20, 
        ДоSsl
    );
    
    // Шаг 4. Инициализируем прокси-класс для вызова методов
    // Обратите внимание: пространство имен и имя сервиса для ДО стандартные
    ДоПрокси = Новый WSПрокси(
        ДоОпределения, 
        "http://www.1c.ru/dm", 
        "DMService", 
        "DMServiceSoap", 
        , 
        , 
        ДоSsl
    );
    
    // Устанавливаем учетные данные для авторизации при вызовах методов прокси
    ДоПрокси.Пользователь = ЛогинДО;
    ДоПрокси.Пароль = ПарольДО;
    
    ЗаписьЖурналаРегистрации(
        "Интеграция.Подключение",
        УровеньЖурналаРегистрации.Информация,
        ,
        ,
        "Успешное подключение к веб-сервисам 1С:ДО по протоколу HTTPS."
    );
    
Исключение
    // Шаг 5. Обрабатываем возможные ошибки подключения
    ИнформацияОбОшибке = ИнформацияОбОшибке();
    ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
    
    ЗаписьЖурналаРегистрации(
        "Интеграция.ОшибкаПодключения",
        УровеньЖурналаРегистрации.Ошибка,
        ,
        ,
        "Не удалось подключиться к 1С:ДО по HTTPS. Причина: " + ТекстОшибки
    );
    
    // Выводим информативное сообщение пользователю или администратору
    ВызватьИсключение "Ошибка интеграции с 1С:Документооборот! Подробности: " + ТекстОшибки;
КонецПопытки;

Резюме и чеклист для быстрого устранения неполадок

Подводя итоги, если после перехода веб-сервисов на HTTPS у вас перестал работать обмен, проверьте следующие моменты:

  1. Где выполняется код? Если база клиент-серверная, сертификаты должны быть настроены на компьютере, где запущен сервер приложений 1С (rphost), а не на вашем ПК.
  2. Доверие к сертификату: Либо пропишите корневой сертификат вашего домена в файл cacert.pem в каталоге bin платформы на сервере и перезапустите службу 1С, либо импортируйте его в системное хранилище «Локальный компьютер» операционной системы сервера.
  3. Настройки IIS: Для виртуального каталога 1С должна быть строго включена «Анонимная проверка подлинности» и выключены все остальные методы авторизации IIS.
  4. Клиентские сертификаты в IIS: В параметрах SSL должно быть установлено «Игнорировать» (Ignore) для клиентских сертификатов.
  5. Код 1С: В конструкторы WSОпределения и WSПрокси обязательно должен передаваться сконфигурированный объект ЗащищенноеСоединениеOpenSSL.

Следуя этим правилам, мы обеспечим безопасное, быстрое и стабильное подключение к любым веб-сервисам 1С по защищенному протоколу HTTPS.

← На главную