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

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

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

Разграничение понятий: URI пространства имен и URL веб-сервиса

Прежде всего, проанализируем концептуальную ошибку, с которой сталкиваются многие разработчики. В коде инициализации прокси-сервиса часто путают два разных понятия. Рассмотрим фрагмент кода, представленный в вопросе:


ПараметрыПодключения = Новый Структура;
ПараметрыПодключения.Вставить("URI", "https://1c.companyname.com:48443/mobile");
// ...
Сервис = WSСсылки.WSСсылкаOrders.СоздатьWSПрокси(ПараметрыПодключения.URI, ПараметрыПодключения.ИмяСервиса, ПараметрыПодключения.ИмяПорта, ...);

Выясним причину возможной путаницы. В методе СоздатьWSПрокси первым параметром передается URIПространстваИмен. Это не адрес в интернете, а уникальный идентификатор типов данных, описанный в WSDL-схеме вашего сервиса. Рассмотрим подробнее:

  1. URI пространства имен: Это текстовая строка (например, "http://www.company.com/orders"), которая задается в свойствах объекта Веб-сервис в Конфигураторе. Она не обязана быть рабочей ссылкой.
  2. URL (Местоположение): Это физический адрес публикации на веб-сервере (например, "https://1c.companyname.com/base/ws/orders.1cws").

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

Проблема цепочки доверия SSL-сертификатов

Если с адресами всё верно, но ошибка сохраняется, проанализируем ситуацию с сертификатами. Мобильная платформа 1С (особенно на Android и iOS) гораздо строже относится к безопасности, чем обычный браузер на Windows. Рассмотрим типичные проблемы:

1. Самоподписанные сертификаты. Если вы создали сертификат самостоятельно, мобильное устройство по умолчанию ему не доверяет. В этом случае операционная система просто обрывает соединение на этапе рукопожатия (Handshake). Чтобы решить эту проблему, необходимо вручную импортировать файл корневого сертификата (в формате .crt или .cer) в хранилище доверенных сертификатов самого смартфона.

2. Неполная цепочка сертификатов (Intermediate Certificates). Это наиболее коварная причина. Когда вы покупаете сертификат, центр сертификации выдает вам основной сертификат и один или несколько промежуточных (Intermediate). Браузеры на десктопе часто умеют сами докачивать недостающие звенья цепи, но мобильная платформа 1С этого не делает. Если на веб-сервере (Apache или IIS) не настроена отдача полной цепочки (Full Chain), мобильное приложение выдаст ошибку соединения.

Для проверки рекомендуется использовать специализированные онлайн-сервисы проверки SSL. Если проверка показывает «Chain issues» или «Incomplete chain», вам необходимо объединить ваш сертификат и промежуточные сертификаты в один файл и обновить настройки веб-сервера.

Инициализация защищенного соединения в коде 1С

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


ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
Сервис = WSСсылки.WSСсылкаOrders.СоздатьWSПрокси(
    ПараметрыПодключения.URI, 
    ПараметрыПодключения.ИмяСервиса, 
    ПараметрыПодключения.ИмяПорта, 
    , 
    ПараметрыПодключения.Таймаут, 
    ЗащищенноеСоединение
);

Обратите внимание на объект ЗащищенноеСоединениеOpenSSL. На мобильных устройствах параметры этого объекта могут играть решающую роль. Если вы используете Неопределено в конструкторе, система пытается использовать стандартные настройки ОС. Если же на сервере используются специфические требования к проверке отзыва сертификатов или нестандартные криптопровайдеры, может потребоваться более тонкая настройка объекта СертификатыУдостоверяющихЦентров.

Сетевые ограничения и настройки веб-сервера

Проанализируем ситуацию с сетевой доступностью. Использование нестандартных портов, таких как 48443, может привести к ряду проблем:

Разрешения мобильного приложения

Выясним причину, связанную со сборкой самого приложения. Если вы собираете автономное мобильное приложение (apk или ipa), убедитесь, что в параметрах сборки установлены соответствующие разрешения. Без флага «Использовать интернет» (INTERNET) в манифесте приложения любые попытки вызвать WSПрокси будут блокироваться на уровне операционной системы, при этом 1С будет выдавать общую ошибку соединения.

Также стоит учитывать политику Android Network Security Config. Начиная с Android 9, система запрещает передачу данных в открытом виде (Cleartext traffic). Хотя вы используете HTTPS, убедитесь, что в процессе обращения не происходит редиректов на HTTP-адреса, так как это приведет к мгновенному разрыву сессии.

Пошаговый план диагностики

Чтобы окончательно решить проблему, рекомендуем выполнить следующие действия:

  1. Откройте браузер на мобильном устройстве и введите адрес вашего WSDL (например, https://ваша_ссылка/ws/Orders?wsdl). Если браузер выдает предупреждение о безопасности — проблема в сертификате.
  2. Проверьте корректность передачи URIПространстваИмен в первом параметре СоздатьWSПрокси. Он должен совпадать с тем, что указано в конфигурации 1С, а не с URL в адресной строке.
  3. Если используется самоподписанный сертификат, убедитесь, что он установлен в систему смартфона как «Доверенный сертификат».
  4. Временно опубликуйте сервис по протоколу HTTP на порту 80. Если через HTTP всё работает, значит, проблема на 100% локализована в настройках SSL/TLS или портах.
  5. Проверьте наличие прав доступа пользователя 1С к веб-сервису (роль с соответствующими правами).

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

← На главную