Перевод интеграционных решений на протокол шифрования HTTPS — это стандартное требование современной корпоративной безопасности. Однако для разработчика 1С этот шаг часто оборачивается каскадом труднообъяснимых ошибок. Типичный сценарий: настроенный и стабильно работающий по HTTP обмен с веб-сервисами «1С:Документооборота» (ДО) после перевода веб-сервера на HTTPS полностью прекращает функционировать. При попытке переписать код «в лоб» система выдает ошибку «Удаленный узел не прошел проверку», а после попыток обойти её — «Аутентификация пользователя не выполнена».
В этой статье мы подробно разберем природу обеих ошибок, выясним, почему стандартные действия в коде не приносят результата, и разработаем пошаговый план решения проблемы как на стороне платформы 1С, так и на стороне веб-сервера IIS.
Данная ошибка означает, что платформа 1С при попытке установить защищенное соединение SSL/TLS не смогла проверить подлинность SSL-сертификата, который ей предоставил веб-сервер IIS. Простыми словами, 1С не доверяет этому сертификату.
Почему это происходит, даже если на локальном компьютере разработчика всё открывается через браузер без предупреждений? Разберем ключевые причины:
Новый WSОпределения() или Новый WSПрокси() в серверном модуле выполняется на стороне сервера приложений 1С (процесс rphost). Следовательно, проверку SSL-сертификата выполняет операционная система сервера 1С, а не ваш локальный компьютер. Все манипуляции по установке сертификатов на локальном ПК разработчика в этом случае абсолютно бесполезны.cacert.pem, расположенным в каталоге установки платформы, либо обращается к системному хранилищу ОС Windows (в зависимости от параметров инициализации объекта ЗащищенноеСоединениеOpenSSL).Рассмотрим детально три основных способа устранения ошибки проверки сертификата на сервере приложений 1С.
Это самый надежный кроссплатформенный метод, который гарантирует корректную работу 1С как под Windows, так и под Linux.
.crt, .cer или .pem). Если администратор предоставил файлы сертификатов в разных форматах, выберите корневой (в его названии часто присутствует слово «root» или «ca»).bin. Например: C:\Program Files\1cv8\8.3.22.1709\bin\.cacert.pem и откройте его текстовым редактором от имени Администратора.cacert.pem.1C:Enterprise 8.3 Server Agent). Процесс rphost считывает файл cacert.pem только в момент своего запуска. Без перезапуска службы изменения не вступят в силу.Если сервер 1С работает под управлением ОС Windows, мы можем импортировать сертификат в операционную систему. Однако здесь есть важный нюанс: служба сервера 1С работает под определенной учетной записью (обычно это USR1CV8 или локальная система SYSTEM).
mmc и нажмите Enter.После этого в коде 1С необходимо инициализировать защищенное соединение с явным указанием использовать системное хранилище Windows:
ДоSsl = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(),
Новый СертификатыУдостоверяющихЦентровWindows()
);
Если вам нужно срочно проверить работоспособность интеграции и исключить влияние 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, происходит следующее:
401 Unauthorized.Чтобы решить проблему с авторизацией, вам необходимо попросить системного администратора проверить и настроить параметры публикации базы 1С:Документооборота в диспетчере служб IIS. Сформулируйте для него следующие задачи:
Дополнительно проверьте структуру файла публикации 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>
После того как все серверные настройки выполнены, соберем программный код подключения к веб-сервису «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 у вас перестал работать обмен, проверьте следующие моменты:
cacert.pem в каталоге bin платформы на сервере и перезапустите службу 1С, либо импортируйте его в системное хранилище «Локальный компьютер» операционной системы сервера.WSОпределения и WSПрокси обязательно должен передаваться сконфигурированный объект ЗащищенноеСоединениеOpenSSL.Следуя этим правилам, мы обеспечим безопасное, быстрое и стабильное подключение к любым веб-сервисам 1С по защищенному протоколу HTTPS.