Как создать WS-ссылку по протоколу HTTPS в 1С и настроить защищенное соединение?

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

При интеграции 1С с внешними сервисами по протоколу HTTPS (например, при настройке обмена с логистическими компаниями или службами доставки) разработчики часто сталкиваются со сложностями при попытке добавления WS-ссылки в Конфигураторе. При указании URL-адреса, начинающегося с https://, платформа выдает окно «Защищенное соединение» с требованием выбрать клиентский сертификат и способ проверки сертификации сервера.

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

Причины возникновения ошибки защищенного соединения

Выясним причину, почему веб-сервис без проблем открывается в обычном веб-браузере, но вызывает ошибки в Конфигураторе 1С:

  1. Разница в проверке цепочки доверия сертификатов: Современные браузеры автоматически загружают недостающие промежуточные сертификаты удостоверяющих центров (CA). Платформа 1С при обращении через SSL/TLS строго проверяет всю цепочку сертификатов по своему локальному хранилищу. Если корневой или промежуточный сертификат отсутствует в файле доверенных сертификатов платформы, соединение отклоняется.
  2. Вложенные XSD-схемы в WSDL-описании: Файл WSDL часто содержит импорт сторонних схем через тег xsd:import с указанием ссылок по протоколу HTTPS. Конфигуратор пытается последовательно скачать каждую схему, и если хотя бы одна из них не проходит SSL-проверку, импорт WS-ссылки завершается с ошибкой.
  3. Строгие требования диалога в Конфигураторе: Интерактивный диалог создания статичной WS-ссылки в дереве метаданных требователен к настройкам безопасности и не всегда задействует системное хранилище Windows без явного импорта сертификатов.

Способ 1. Загрузка WSDL-файла локально (для статичной WS-ссылки)

Проанализируем наименее трудоемкий способ создания WS-ссылки в Конфигураторе, который позволяет обойти проблемы с SSL при импорте WSDL.

  1. Откроем адрес WSDL-описания веб-сервиса в браузере и сохраним страницу в файл с расширением .wsdl на локальный диск (например, service.wsdl).
  2. Если в коде WSDL встречаются ссылки на вложенные XSD-схемы, их также необходимо скачать и сохранить в ту же папку на диске.
  3. В Конфигураторе 1С при создании объекта WSСсылка укажем путь к сохраненному файлу на диске вместо HTTPS-ссылки.
  4. После сохранения WS-ссылки в дереве метаданных переопределим адрес подключения (endpoint) в программном коде при вызове методов веб-сервиса.

Способ 2. Динамическое создание WS-подключения в коде

Рассмотрим вариант, при котором нет необходимости фиксировать WS-ссылку в дереве метаданных. Создадим объект WSОпределения программно во время выполнения приложения с помощью объекта ЗащищенноеСоединениеOpenSSL.

Посмотрим на пример кода для платформы 1С:Предприятие:


// Создаем экземпляр защищенного соединения
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();

// При необходимости использования системного хранилища Windows:
// ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Новый СертификатыУдостоверяющихЦентровWindows());

URL_WSDL = "https://service.example.com/ws/service?wsdl";

Попытка
    // Создаем определение веб-сервиса
    Определение = Новый WSОпределения(URL_WSDL, , , ЗащищенноеСоединение);
    
    // Получаем прокси для вызова методов
    Прокси = Новый WSПрокси(Определение, URIПространстваИмен, ИмяСервиса, ИмяПорта);
    
    // Вызываем требуемый метод сервиса
    Результат = Прокси.ИмяМетода();
Исключение
    Сообщить("Ошибка при подключении к веб-сервису: " + ОписаниеОшибки());
КонецПопытки;

Этот подход позволяет гибко настраивать параметры безопасности на сервере или клиенте без привязки к статичной конфигурации метаданных.

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

Если требуется использовать именно статичную WS-ссылку в конфигурации и обращаться по HTTPS напрямую, разберем по шагам порядок добавления корневого сертификата в базу доверенных сертификатов 1С:

  1. Экспортируем корневой и промежуточные сертификаты веб-сервиса из браузера в формате Base-64 (PEM).
  2. Найдем файл cacert.pem, расположенный в каталоге установки платформы 1С (обычно в папке bin\conf или bin).
  3. Откроем файл cacert.pem текстовым редактором и допишем в конец содержимого текст экспортированных сертификатов.
  4. Перезапустим Конфигуратор и повторим попытку создания WS-ссылки по URL-адресу HTTPS.

Способ 4. Использование HTTPСоединение для прямой отправки SOAP-запросов

Если веб-сервис предъявляет нестандартные требования к SSL или механизм WS-ссылок 1С выбывает ошибки из-за структуры WSDL, проанализируем альтернативный вариант отправки SOAP-запросов через объект HTTPСоединение.

Рассмотрим пример формирования и отправки SOAP-пакета:


ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("service.example.com", 443, , , , 30, ЗащищенноеСоединение);

Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "text/xml; charset=utf-8");
Заголовки.Вставить("SOAPAction", "http://example.com/action");

ТекстЗапросаXML = 
"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"">" +
"   <soapenv:Body>" +
"       <GetInfoRequest xmlns=""http://example.com/""/>" +
"   </soapenv:Body>" +
"</soapenv:Envelope>";

Запрос = Новый HTTPЗапрос("/ws/service", Заголовки);
Запрос.УстановитьТелоИзСтроки(ТекстЗапросаXML, КодировкаТекста.UTF8);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);
СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();

При использовании HTTPСоединение разработчик получает полный контроль над заголовками HTTP и телом SOAP-сообщения, что снимает ограничения встроенного механизма импорта WSDL-схем.

← На главную